ViewPager无限轮播,简单实现
来源:互联网 发布:网络口臭导师吴娟真假 编辑:程序博客网 时间:2024/06/05 17:20
//不墨迹,直接上
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(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if(msg.what==1){ int db = vp.getCurrentItem(); db++; vp.setCurrentItem(db); } } }; @Override protected 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() { @Override public 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)); } } } @Override public void onPageSelected(int position) { } @Override public void onPageScrollStateChanged(int state) { } });// 为了简单,这里选择了休眠 new Thread(){ @Override public 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; @Override public 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; else touchFlag = -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); }}
阅读全文
0 0
- ViewPager无限轮播,简单实现
- ViewPager实现无限轮播
- ViewPager无限轮播实现
- 简单的ViewPager无限轮播
- 简单PullToRefreshListView+ViewPager无限轮播
- Android ViewPager实现广告无限轮播
- Android viewpager实现无限循环轮播
- Viewpager实现小圆点无限轮播
- ViewPager实现无限轮播+小圆点
- Android 无限轮播ViewPager的实现
- 自定义无限轮播ViewPager的实现
- ViewPager实现无限轮播+小点点
- ViewPager实现无限轮播+小点点
- viewpager无限轮播
- Viewpager无限轮播
- Viewpager无限轮播
- ViewPager无限轮播
- ViewPager无限轮播
- Java 集合深入理解(7):ArrayList
- jmeter中Parameters和Body Data区别
- runtime简单介绍
- [几何]判断点是否在不规则多边形内
- Spring Cloud Zuul中路由配置细节
- ViewPager无限轮播,简单实现
- 用Python学《微积分B》(多元函数Taylor公式)
- 电话号码查询系统(链式结构)
- 我的前半生面试过300精英+学霸,总结出的面试经验干货大放送!
- 20个科学小知识,带你走进科学世界
- 28岁上榜福布斯、估值2亿美元、参加国务院会议……这个清华走出的CEO全靠“刷脸”
- 最最最基础js
- linux线清空文件内容
- 怎么查找XCode模拟器的保存路径?以及真机的沙盒文件?