打造最简单ViewPager指示器,实现小圆点效果
2016-11-02 09:04
447 查看
实现ViewPager小圆点效果,最简单的轮播图
为了实现这样的效果我们首先应该仔细研究一下这个接口OnPageChangeListener它里面有三个方法1. onPageSelected(int position): 这个方法有一个参数position,就是position代表当前被选中的页面。
2. onPageScrolled(int position, float positionOffset, int positionOffsetPixels):这个方法会在屏幕滚动过程中不断被调用。
有三个参数,第一个position,当用手指滑动时,如果手指按在页面上不懂,position和当前页面index是一致的;如果手指向左拖动(相应页面向右翻动),这个时候position大部分时间和当前页面一致,只有翻页成功的情况下最后一次调用才会变为目标页面;如果手指向右拖动(相应页面向左翻动),原理一样。
第二个参数positionOffset是当前页面滑动比例,如果页面向右翻动,这个值不断变大,最后趋近1的情况后变为0,如果页面向左翻动,这个值不断变小,最后为0。
第三个参数positonOffsetPixels是当前页面滑动像素,变化情况和positionOffset一致。
3. onPaheScrollStateChanged(int state): 这个方法在手指操作屏幕的时候发生变化,state有三个值分别是:0(END)、1(PRESS)、2(UP);
当用手指滑动翻页时,手指按下去的时候会触发这个方法,state值为1,抬起时如果发生了滑动,这个值会变为2,然后最后变为0.总共执行这个方法三次。一种特殊情况是手指按下去以后一点滑动也没有发生,这个时候只会调用这个方法两次,state的值分别是1,0。
三个方法的执行顺序为:用手指拖动翻页时,最先执行一遍onPageScrollStateChanged(1),然后不断执行onPageScrolled,放手指的时候,直接立即执行一次onPageScr
4000
ollStateChanged(2),然后立即执行一次onPageSelected。
好了说了这么多,其实我们主要看onPageSelected(int position)这个方法即可;
按照这个方法我们想一下应该如何开始,我的想法就是在ViewPager下面放一个线性布局,根据轮播广告的条数来动态添加ImageView,根据当前选择的页面来动态的改变当前的小圆点图片。
我们首先自定义一个类来实现这个接口:
public class ViewPagerIndicator implements ViewPager.OnPageChangeListener { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { } @Override public void onPageScrollStateChanged(int state) { } }接着我们想需要的东西,有Context,LinearLayout, ViewPager, 轮播图的size,当然我们还需要两张图片,一个选中状态,一个未被选中状态,还有装ImageView的集合。
完整代码:
public class ViewPagerIndicator implements ViewPager.OnPageChangeListener { private Context context; private ViewPager viewPager; private LinearLayout dotLayout; private int size; private int img1 = R.mipmap.gouwuzy_16, img2 = R.mipmap.gouwuzy_17; private int imgSize = 15; private List<ImageView> dotViewLists = new ArrayList<>(); public ViewPagerIndicator(Context context, ViewPager viewPager, LinearLayout dotLayout, int size) { this.context = context; this.viewPager = viewPager; this.dotLayout = dotLayout; this.size = size; for (int i = 0; i < size; i++) { ImageView imageView = new ImageView(context); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); //为小圆点左右添加间距 params.leftMargin = 10; params.rightMargin = 10; //手动给小圆点一个大小 params.height = imgSize; params.width = imgSize; if (i == 0) { imageView.setBackgroundResource(img1); } else { imageView.setBackgroundResource(img2); } //为LinearLayout添加ImageView dotLayout.addView(imageView, params); dotViewLists.add(imageView); } } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { for (int i = 0; i < size; i++) { //选中的页面改变小圆点为选中状态,反之为未选中 if ((position % size) == i) { ((View) dotViewLists.get(i)).setBackgroundResource(img1); } else { ((View) dotViewLists.get(i)).setBackgroundResource(img2); } } } @Override public void onPageScrollStateChanged(int state) { } }MainActivity中:
public class MainActivity extends AppCompatActivity { private ViewPager vp; private VPAdapter vpAdapter; private LinearLayout ll; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); vp = (ViewPager) findViewById(R.id.vp); vpAdapter = new VPAdapter(this); vp.setAdapter(vpAdapter); ll = (LinearLayout) findViewById(R.id.ll); vp.setOnPageChangeListener(new ViewPagerIndicator(this, vp, ll, 3)); } }效果图:
欢迎下载
相关文章推荐
- Android开发——打造简单的Viewpager指示器(小圆点指示器)
- ViewPager实现简单Tab切换效果
- Android之ViewPager自动循环播放(轮播)效果实现(超简单)
- (原来可以这么简单)实现变色TextView及ViewPager指示器(二)
- 实现变色TextView及ViewPager指示器(原来可以这么简单)
- 自定义控件 - ViewPager页面指示器,轮播小圆点效果,具有三种风格
- ViewPager中代码动态的添加小圆点作为指示器indicator,以及实现无限轮播
- ViewPager实现简单的画廊效果
- 自定义控件实战-打造一个简约而不简单的ViewPager指示器
- RollViewPager简单实现android图片轮播效果
- android之ViewPager简单实现局部页面滑动效果
- ViewPager和Fragment结合,利用(HorizontalScrollView)实现指示器与ViewPager同时滑动的动态效果
- ViewPager实现淘宝天面首页广告栏,支持左右滑动,自动滑动,带圆点指示器
- 简单的ViewPager+Fragment+小圆点的实现
- viewPager+Handler+Timer简单实现广告轮播效果
- Android 自定义 HorizontalScrollView 实现ViewPager效果,打造再多图片(控件)也不怕 OOM
- ViewPager实现淘宝天面首页广告栏,支持左右滑动,自动滑动,带圆点指示器
- viewpager实现简单的轮播效果
- Android ViewPager导航小圆点实现无限循环效果
- 关于ViewPager当前页卡指示器的简单实现方法