ViewPager无限轮播,简单实现
//不墨迹,直接上
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); } }
ViewPager无限轮播,简单实现相关推荐
- ViewPager无限轮播与小点点
在Android开发中经常简单会用到 ViewPager无限轮播与小点点,下面就简单介绍一下,其中的小点点可以找美工绘制,Android工程师也可以自己手动简易制作 定义XML布局文件 <Rel ...
- android viewpager无限轮播
概述 github地址:https://github.com/Double2hao/ViewPagerCycleTest 一直很好奇ViewPager无限轮播的实现方式,于是稍微研究了下,作此文记录之 ...
- XLisetView+ViewPager无限轮播+多条目加载
导xlistview jar包 权限 //主布局 <?xml version="1.0" encoding="utf-8"?> <Linear ...
- TabLayout+ViewPager无限轮播加小圆点,XRecyclerView下拉刷新,加载更多
效果图 要导入的依赖 compile files('libs/okhttp-3.9.0.jar') compile files('libs/okio-1.13.0.jar') comp ...
- Viewpager无限轮播+XlistView
前提 写权限 <uses-permission android:name="android.permission.INTERNET"/> 写name属性 android ...
- ViewPager两种方式实现无限轮播
给自己的忠告:虽然轮子很好用,但是使用轮子的前提是:如果不去封装一些复杂的功能,自己会用最基本的方法写一个,不然再好的轮子那也是别人的,当自己项目遇到和轮子不一样的地方,那就只能束手无策或者改人家的源 ...
- android ViewPager实现无限轮播和设置监听事件
ViewPager的无限轮播,主要以实现为主.代码如下 首先定义activity_viewpager.xml: <LinearLayout android:layout_width=" ...
- 无线轮播android,Android无限轮播Banner的实现
概述 应用首页的广告轮播Banner,一般都会使用ViewPager来实现,但是ViewPager 没有轮播效果. 现成有这么几种实现方案: 1.使用Integer.MAX_VALUE ,理论上很难达 ...
- 利用RecyclerView实现无限轮播广告条
代码地址如下: http://www.demodashi.com/demo/14771.html 前言: 公司产品需要新增悬浮广告条的功能,要求是可以循环滚动,并且点击相应的浮条会跳转到相应的界面,在 ...
最新文章
- 什么是牛顿法(Newton methods)?什么是拟牛顿法(Quasi Newton methods)?牛顿法和梯度下降法的区别是什么?
- c#如何通过ftp上传文件_定时上传文件到ftp,2步完成Windows系统定时上传文件到ftp...
- Linux: TLB 查询流程
- 从源码分析DEARGUI之add_input_text
- Android开发实践:掌握Camera的预览方向和拍照方向
- mysql存储文件用什么类型_块存储、文件存储、对象存储的区别是什么?
- What is 测试金字塔?
- 简单dfs序 + 树链剖分
- RT-Thread中自定义MSH命令传入的参数是字符串,需用户自行检查和解析
- python安装Pillow
- 1000道Python题库系列分享七(30道)
- jdbc连接oracle查询数据库,JDBC连接Oracle数据库,并操作数据库,查询表
- 排队问题解题思路_教育随笔|数学之排队问题
- HDOJ--1864--最大报销额
- 计算机绘图 电子教案,机械制图与计算机绘图电子教案大全.doc
- Foxmail的创建
- 凉凉!Tumblr 或被 300 万贱卖
- 企业邮箱管理员在哪里找?域名邮箱如何管理?
- h5页面使用js实现图片上传(安卓用户也可拍摄、相册二选一)
- 如何使用Couchbase实现文档版本控制
热门文章
- win10 1903 笔记本开热点出现蓝屏问题
- Python计算机视觉编程学习笔记 四 照相机模型与增强现实
- 乔姆斯基生成语法_乔姆斯基与生成语法重点分析.ppt
- APM,监控界的扛把子,牛逼!
- [HDLbits] Conway‘s game of life
- 宁做创业狼,不做打工狗!
- matlab gpib硬件实例,GPIB板的安装及使用初步.doc
- Excel统一将多种段落标记号替换为黑方块的操作
- AndroidGradle基础——渠道化配置
- 计算机仿真三个基本活动,计算机仿真-Read.ppt