ViewPager无限轮播,简单实现
2017-10-31 09:03
337 查看
//不墨迹,直接上
public class PagerAdapter extends android.support.v4.view.PagerAdapter { private List<pagerData> viewlist; private Context context; public PagerAdapter(Context context,List<pagerData> viewlist) { this.viewlist = viewlist; this.context=context; } @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View view, Object object) { return view==object; } @Override public void destroyItem(ViewGroup container, int position, Object object) { } @Override public Object instantiateItem(ViewGroup container, int position) { View view = View.inflate(context, R.layout.tulayout, null); ImageView ggtv =(ImageView) view.findViewById(R.id.imageView); //对ViewPager页号求模取出View列表中要显示的项 position %= viewlist.size(); if (position<0){ position = viewlist.size()+position; } pagerData data = viewlist.get(position); ggtv.setImageResource(data.getData()); container.addView(view); return view; } }
public class Main2Activity extends AppCompatActivity {private ViewPager vp;private LinearLayout ll_dots;private ArrayList<ImageView> dotsList;private List<pagerData> pagerlist;Handler handler=new Handler(){@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);if(msg.what==1){int db = vp.getCurrentItem();db++;vp.setCurrentItem(db);}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);vp=(ViewPager)findViewById(R.id.vp);ll_dots=(LinearLayout)findViewById(R.id.lllllll);pagerlist=new ArrayList<>();pagerlist.add(new pagerData(R.drawable.aaa));pagerlist.add(new pagerData(R.drawable.bbb));pagerlist.add(new pagerData(R.drawable.ccc));pagerlist.add(new pagerData(R.drawable.ddd));vp.setAdapter(new PagerAdapter(this,pagerlist));vp.setCurrentItem(pagerlist.size()*100);initDots();vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {//遍历存放图片的数组for (int i = 0; i < pagerlist.size(); i++) {//判断小点点与当前的图片是否对应,对应设置为亮色 ,否则设置为暗色if (i == position % pagerlist.size()) {dotsList.get(i).setImageDrawable(getResources().getDrawable(R.drawable.yuandiana));} else {dotsList.get(i).setImageDrawable(getResources().getDrawable(R.drawable.yuandianb));}}}@Overridepublic void onPageSelected(int position) {}@Overridepublic void onPageScrollStateChanged(int state) {}});// 为了简单,这里选择了休眠new Thread(){@Overridepublic void run() {super.run();while (true){try {sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}handler.sendEmptyMessage(1);}}}.start();// 添加点击事件vp.setOnTouchListener(new View.OnTouchListener() {int touchFlag = 0;float x = 0, y = 0;@Overridepublic boolean onTouch(View view, MotionEvent motionEvent) {ViewConfiguration configuration = ViewConfiguration.get(Main2Activity.this);int mTouchSlop = ViewConfigurationCompat.getScaledPagingTouchSlop(configuration);switch (motionEvent.getAction()) {case MotionEvent.ACTION_DOWN:touchFlag = 0;x = motionEvent.getX();y = motionEvent.getY();break;case MotionEvent.ACTION_MOVE:float xDiff = Math.abs(motionEvent.getX() - x);float yDiff = Math.abs(motionEvent.getY() - y);if (xDiff < mTouchSlop && xDiff >= yDiff)touchFlag = 0;elsetouchFlag = -1;break;case MotionEvent.ACTION_UP:if (touchFlag == 0) {int item = vp.getCurrentItem();int a = pagerlist.size();for(int i=0;i<a;i++){int b = item%a;Intent intent=new Intent(Main2Activity.this,MainActivity.class);// int ids = pagerlist.get(b).getData();// intent.putExtra("id",id);startActivity(intent);break;}}break;}return false;}});}private void initDots() {//创建存放小点点的集合dotsList = new ArrayList<ImageView>();//每次初始化之前清空集合dotsList.clear();// 每次初始化之前 移除 布局中的所有小点ll_dots.removeAllViews();for (int i = 0; i < pagerlist.size(); i++) {//创建小点点图片ImageView imageView = new ImageView(this);Drawable drawable = null;if (i == 0) {// 亮色图片drawable = getResources().getDrawable(R.drawable.yuandiana);} else {drawable = getResources().getDrawable(R.drawable.yuandianb);}imageView.setImageDrawable(drawable);// 考虑屏幕适配LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(dip2px(this, 10), dip2px(this, 10));//设置小点点之间的间距params.setMargins(dip2px(this, 5), 0, dip2px(this, 5), 0);//将小点点添加大线性布局中ll_dots.addView(imageView, params);// 将小点的控件添加到集合中dotsList.add(imageView);}}/*** 根据手机的分辨率从 dp 的单位 转成为 px(像素)*/public int dip2px(Context context, float dpValue) {final float scale = context.getResources().getDisplayMetrics().density;return (int) (dpValue * scale + 0.5f);}}
相关文章推荐
- android ViewPager实现无限轮播和设置监听事件
- Android无限循环与自动播放ViewPager的简单实现(广告栏)
- ViewPager轮播图:自动无限轮播,手指长按停止,实现点击事件(实用版)
- ViewPager网络加载图片并无限轮播实现
- 记android ViewPager实现轮播图的无限滚动笔记
- 如何用viewpager写一个简单易用的安卓Bannner实现轮播
- 三层继承ViewPager实现无限轮播图Banner
- Android 无限轮播ViewPager的实现
- viewpager实现启动页面的无限滑动、可点击导航点(导航点定位)(简单易懂)
- Android 中ViewPager 实现banner无限轮播效果
- 简单实现viewpager 自动轮播,触摸停止轮播,离开继续轮播
- viewpager实现画廊(中间图片全部显示,左右显示一部分b布局)无限轮播效果
- android中使用ViewPager实现无限轮播图
- 实现viewpager无限轮播,但比它更炫酷
- ViewPager无限轮播实现
- 无限循环的轮播图ViewPager实现
- ViewPager实现轮播图(可无限向左或向右滑动)
- Android简单实现无限滚动自动滚动的ViewPager
- ViewPager实现无限循环,左右滑动,定时轮播及内存泄漏处理
- ViewPager实现无限轮播+小圆点