四十七 Android项目实战:轮播图效果Viewpager

简易、常用的轮播图效果  , 老技术了 , 记一笔留着以后ctrl C + ctrl V
需求如下:
不定张个数的轮播 , 右下角显示轮播点图标 , 每隔固定时间切换下一张 , 最后一张图片自动切换后的为第一张图片 , 手指触摸可以滑动 。

四十七  Android项目实战:轮播图效果Viewpager

文章插图
思路:
初始化和轮播点之后  ,  开启一个子线程 , 每隔3秒判断一次 当前位置是不是轮播图数据个数的最后一个位置 , 是的话切换到第一张图片 , 不是的话切换到下一张图片
一、先看布局文件 , 根容器为相对布局 , 里面放一个控件 , 并在 控件右下角位置放一个线性布局 , 用于动态添加轮播点
四十七  Android项目实战:轮播图效果Viewpager

文章插图

二、 几个生命周期以及关键方法
四十七  Android项目实战:轮播图效果Viewpager

文章插图
1、()方法
private void initData() {viewPagerData = http://www.kingceram.com/post/new ArrayList<>();ImageView imageView = new ImageView(this);/*添加图片资源 , 实际开发中为for循环即可  , 这里demo麻烦了*/// 第一张图片imageView.setBackgroundResource(R.mipmap.aaa);imageView.setScaleType(ImageView.ScaleType.FIT_XY);viewPagerData.add(imageView);// 第二张图片ImageView imageView2 = new ImageView(this);imageView2.setBackgroundResource(R.mipmap.bbb);imageView2.setScaleType(ImageView.ScaleType.FIT_XY);viewPagerData.add(imageView2);// 第三张图片ImageView imageView3 = new ImageView(this);imageView3.setBackgroundResource(R.mipmap.ccc);imageView3.setScaleType(ImageView.ScaleType.FIT_XY);viewPagerData.add(imageView3);}
2、()方法
/*** 动态创建轮播图位置点显示*/private void initDots() {// 动态添加轮播图位置点 , 默认第0个位置 为当前轮播图的颜色for (int i = 0; i < viewPagerData.size(); i++) {imageView = new ImageView(this);if (i==0) {imageView.setBackgroundColor(Color.parseColor(SelectColor));}else{imageView.setBackgroundColor(Color.parseColor(unSelectColor));}imageView.setLayoutParams(new LinearLayout.LayoutParams(dip2px(8), dip2px(8)));setMargins(imageView,dip2px(2),0,dip2px(2),0);lyDot.addView(imageView);}}
四十七  Android项目实战:轮播图效果Viewpager

文章插图
3、()方法
private void initViewpager() {//数据适配器viewPagerAdapter = new PagerAdapter() {private int mChildCount = 0;@Overridepublic void notifyDataSetChanged() {mChildCount = getCount();super.notifyDataSetChanged();}@Overridepublic int getItemPosition(Object object) {if (mChildCount > 0) {mChildCount--;return POSITION_NONE;}return super.getItemPosition(object);}@Override//获取当前窗体界面数public int getCount() {// TODO Auto-generated method stubreturn viewPagerData.size();}@Overridepublic boolean isViewFromObject(View view, Object object) {return view == object;}//是从ViewGroup中移出当前Viewpublic void destroyItem(View arg0, int arg1, Object arg2) {((ViewPager) arg0).removeView(viewPagerData.get(arg1));}//返回一个对象 , 这个对象表明了PagerAdapter适配器选择哪个对象放在当前的ViewPager中public Object instantiateItem(View arg0, int arg1) {((ViewPager) arg0).addView(viewPagerData.get(arg1));return viewPagerData.get(arg1);}};viewpager.setAdapter(viewPagerAdapter);viewpager.setCurrentItem(0);viewpager.setOffscreenPageLimit(7);viewpager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}@Overridepublic void onPageSelected(int position) {currentPosition = position;for (int i = 0; i