ViewPager这个小demo实现的是可以左右循环滑动图片,下面带索引,滑到最后一页在往右滑动就要第一页,第一页往左滑动就到最后一页,先上效果图,用美女图片是我一贯的作风,呵呵
1. 首先看一些layout下的xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <LinearLayout android:id="@+id/viewGroup" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginBottom="30dp" android:gravity="center_horizontal" android:orientation="horizontal" > </LinearLayout> </RelativeLayout> </FrameLayout>
使用ViewPager首先需要引入android-support-v4.jar这个jar包。自己不要忘记加
package com.example.viewpagerdemo; import android.app.Activity; import android.os.Bundle; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.ImageView; import android.widget.LinearLayout; public class TwoActivity extends Activity implements OnPageChangeListener{ /** * ViewPager */ private ViewPager viewPager; /** * 装点点的ImageView数组 */ private ImageView[] tips; /** * 装ImageView数组 */ private ImageView[] mImageViews; /** * 图片资源id */ private int[] imgIdArray ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ViewGroup group = (ViewGroup)findViewById(R.id.viewGroup); viewPager = (ViewPager) findViewById(R.id.viewPager); //载入图片资源ID imgIdArray = new int[]{R.drawable.item01, R.drawable.item02, R.drawable.item03, R.drawable.item04, R.drawable.item05,R.drawable.item06, R.drawable.item07, R.drawable.item08}; //将点点加入到ViewGroup中 tips = new ImageView[imgIdArray.length]; for(int i=0; i<tips.length; i++){ ImageView imageView = new ImageView(this); imageView.setLayoutParams(new LayoutParams(10,10)); tips[i] = imageView; if(i == 0){ tips[i].setBackgroundResource(R.drawable.page_indicator_focused); }else{ tips[i].setBackgroundResource(R.drawable.page_indicator_unfocused); } LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); layoutParams.leftMargin = 5; layoutParams.rightMargin = 5; group.addView(imageView, layoutParams); } //将图片装载到数组中 mImageViews = new ImageView[imgIdArray.length]; for(int i=0; i<mImageViews.length; i++){ ImageView imageView = new ImageView(this); mImageViews[i] = imageView; imageView.setBackgroundResource(imgIdArray[i]); } //设置Adapter viewPager.setAdapter(new MyAdapter()); //设置监听,主要是设置点点的背景 viewPager.setOnPageChangeListener(this); //设置ViewPager的默认项, 设置为长度的100倍,这样子开始就能往左滑动 viewPager.setCurrentItem((mImageViews.length) * 100); } /** * * @author xiaanming * */ public class MyAdapter extends PagerAdapter{ @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } @Override public void destroyItem(View container, int position, Object object) { ((ViewPager)container).removeView(mImageViews[position % mImageViews.length]); } /** * 载入图片进去,用当前的position 除以 图片数组长度取余数是关键 */ @Override public Object instantiateItem(View container, int position) { ((ViewPager)container).addView(mImageViews[position % mImageViews.length], 0); return mImageViews[position % mImageViews.length]; } } @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageSelected(int arg0) { setImageBackground(arg0 % mImageViews.length); } /** * 设置选中的tip的背景 * @param selectItems */ private void setImageBackground(int selectItems){ for(int i=0; i<tips.length; i++){ if(i == selectItems){ tips[i].setBackgroundResource(R.drawable.page_indicator_focused); }else{ tips[i].setBackgroundResource(R.drawable.page_indicator_unfocused); } } } }
上面的代码中,当只有3张图片或者2张图片的时候,滑动存在BUG问题的修改如下
- destroyItem(View container, int position, Object object)方法中不removeView
@Override public void destroyItem(View container, int position, Object object) { // ((ViewPager)container).removeView(mImageViews[position % mImageViews.length]); }
- instantiateItem(View container, int position)增加异常扑捉
@Override public Object instantiateItem(View container, int position) { try { ((ViewPager)container).addView(mImageViews[position % mImageViews.length], 0); }catch(Exception e){ //handler something } return mImageViews[position % mImageViews.length]; }
相关推荐
该资源中有两个文件,一个是直接写的可以自动轮播和手动轮播的demo,一个是自定义了一个bannerview控件,这个控件实现了手动轮播,类似于android中的广告图,如果要实现自动轮播只需添加一个定时器即可。 博文网址:...
在标题“Android ViewPager实现左右循环滑动及轮播效果”中,提到的关键技术点是使ViewPager具备循环滑动和轮播功能。下面我们将深入探讨如何实现这些效果。 1. **ViewPager基础**: ViewPager最初是Android ...
类似用户引导页,可以滑动,左右滑动已经有大量实现,但循环滑动实现较少或者实现的效果不是很好。 效果不好主要体现在大概以下四个方面:图片少的时候会崩溃...故此处实现任何图片的左右自然的循环滑动以及自动播放。
在Android开发中,ViewPager是一个非常常用的组件,它用于展示可以左右滑动的页面序列,常用于实现类似Tab切换或者图片轮播的效果。本教程将详细讲解如何实现ViewPager的无限循环左右滑动效果。 首先,我们需要了解...
至此,我们就实现了Android中的ViewPager无限循环滑动以及小圆点监听。在实际项目中,可以根据需求调整小圆点的样式、动画效果等,以满足不同的UI设计。在压缩包`Android10_ViewPagerDemo01`中,包含了完整的示例...
在Android开发中,实现一个美观且功能完善的...以上就是使用`ViewPager`实现图片轮播,包括自动轮播和左右无限制滑动的详细步骤。这个解决方案已经经过验证,可以放心使用。记得根据实际需求调整代码,以适应你的项目。
总的来说,实现ViewPager循环滚动切换Fragment需要对Android的Fragment管理和动画系统有深入理解,并且需要进行一些定制化的工作。通过自定义`PagerAdapter`、`PageTransformer`以及合理的生命周期管理,我们可以...
下面,我们将深入探讨如何实现ViewPager的左右循环滑动,并且不修改`PagerAdapter`。 首先,我们需要创建一个新的类,继承自`ViewPager`。这个类将覆盖`ViewPager`的`onPageScrolled()`和`onPageSelected()`方法,...
类似用户引导页,可以滑动,左右滑动已经有大量实现,但循环滑动实现较少或者实现的效果不是很好。 效果不好主要体现在大概以下四个方面:图片少的时候会崩溃...故此处实现任何图片的左右自然的循环滑动以及自动播放。
总结,"Viewpager左右循环滚动"是一个Android开发中的高级技巧,涉及到对ViewPager的深入理解和自定义,通过这样的实现,我们可以创建出更加丰富的用户体验,让用户在浏览内容时享受到流畅的循环滑动效果。
在标题"viewpager实现无限循环滚动幻灯片"中,我们要讨论的是如何利用ViewPager实现一个能够无限循环滚动的幻灯片效果,这通常在广告轮播器或类似功能中很有用。 首先,ViewPager本身并不直接支持无限循环,它默认...
本教程将详细讲解如何实现ViewPager的左右无限循环滑动,并结合自定义小圆点指示器来增强用户体验。 首先,我们需要理解ViewPager的基本用法。ViewPager继承自PagerAdapter,其核心在于`PagerAdapter`的`...
要实现循环滑动,我们需要扩展ViewPager的这一特性,创建一个自定义的ViewPager子类,并重写其`onPageScrolled()`、`onPageSelected()`等方法,以处理边界情况。 在自定义的ViewPager中,我们可以监听滑动事件,当...
标题"viewpager 实现一屏幕多页循环滚动"涉及到的技术点是如何让ViewPager不仅展示多个页面,而且能够实现循环滚动,即当滑动到最后一页时,会无缝跳转到第一页,反之亦然。这种效果常见于轮播图或者推荐栏等场景。 ...
一种常见的方法是使用第三方库,如`androidx.carousel.viewpager2`或者`SmartViewPager`等,它们已经实现了自动循环滚动的功能。但如果我们想要自己实现,我们可以创建一个自定义的PagerAdapter,并在其中添加必要的...
本实例将详细介绍如何利用ViewPager实现图片的循环播放功能。 首先,我们需要理解ViewPager的基本原理。ViewPager是Android Support Library中的一个控件,它可以承载多个Fragment或者View,并根据用户的滑动操作在...
这个压缩包“使用ViewPager实现左右滑动翻页.zip”很可能包含了一个示例项目,展示了如何在应用中集成并使用ViewPager。下面我们将详细探讨ViewPager的相关知识点。 **1. ViewPager的基本概念** ViewPager是Android...
在这个例子中,我们将学习如何利用ViewPager实现一个可以左右循环滑动的图片轮播,同时在底部显示页码指示器。 首先,我们需要在布局文件中添加ViewPager和页码指示器的视图。如上所示的XML布局中,我们有一个包含...
在Android开发中,`ViewPager`是一个非常常用的组件,它允许用户通过左右滑动来浏览多个页面,通常用于实现Tab切换或者展示多个相似内容的页面。`Fragment`则是Android中的一个模块化组件,它可以独立于Activity存在...
【使用ViewPager实现左右循环滑动及滑动跳转】是一个常见的Android开发需求,尤其是在创建轮播图、引导页或者无限滚动界面时。ViewPager是Android SDK中的一个组件,它允许用户在多个视图间进行平滑的左右滑动切换。...