//不墨迹,直接上

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无限轮播,简单实现相关推荐

  1. ViewPager无限轮播与小点点

    在Android开发中经常简单会用到 ViewPager无限轮播与小点点,下面就简单介绍一下,其中的小点点可以找美工绘制,Android工程师也可以自己手动简易制作 定义XML布局文件 <Rel ...

  2. android viewpager无限轮播

    概述 github地址:https://github.com/Double2hao/ViewPagerCycleTest 一直很好奇ViewPager无限轮播的实现方式,于是稍微研究了下,作此文记录之 ...

  3. XLisetView+ViewPager无限轮播+多条目加载

    导xlistview jar包 权限 //主布局 <?xml version="1.0" encoding="utf-8"?> <Linear ...

  4. TabLayout+ViewPager无限轮播加小圆点,XRecyclerView下拉刷新,加载更多

    效果图 要导入的依赖 compile files('libs/okhttp-3.9.0.jar')     compile files('libs/okio-1.13.0.jar')     comp ...

  5. Viewpager无限轮播+XlistView

    前提 写权限 <uses-permission android:name="android.permission.INTERNET"/> 写name属性 android ...

  6. ViewPager两种方式实现无限轮播

    给自己的忠告:虽然轮子很好用,但是使用轮子的前提是:如果不去封装一些复杂的功能,自己会用最基本的方法写一个,不然再好的轮子那也是别人的,当自己项目遇到和轮子不一样的地方,那就只能束手无策或者改人家的源 ...

  7. android ViewPager实现无限轮播和设置监听事件

    ViewPager的无限轮播,主要以实现为主.代码如下 首先定义activity_viewpager.xml: <LinearLayout android:layout_width=" ...

  8. 无线轮播android,Android无限轮播Banner的实现

    概述 应用首页的广告轮播Banner,一般都会使用ViewPager来实现,但是ViewPager 没有轮播效果. 现成有这么几种实现方案: 1.使用Integer.MAX_VALUE ,理论上很难达 ...

  9. 利用RecyclerView实现无限轮播广告条

    代码地址如下: http://www.demodashi.com/demo/14771.html 前言: 公司产品需要新增悬浮广告条的功能,要求是可以循环滚动,并且点击相应的浮条会跳转到相应的界面,在 ...

最新文章

  1. 什么是牛顿法(Newton methods)?什么是拟牛顿法(Quasi Newton methods)?牛顿法和梯度下降法的区别是什么?
  2. c#如何通过ftp上传文件_定时上传文件到ftp,2步完成Windows系统定时上传文件到ftp...
  3. Linux: TLB 查询流程
  4. 从源码分析DEARGUI之add_input_text
  5. Android开发实践:掌握Camera的预览方向和拍照方向
  6. mysql存储文件用什么类型_块存储、文件存储、对象存储的区别是什么?
  7. What is 测试金字塔?
  8. 简单dfs序 + 树链剖分
  9. RT-Thread中自定义MSH命令传入的参数是字符串,需用户自行检查和解析
  10. python安装Pillow
  11. 1000道Python题库系列分享七(30道)
  12. jdbc连接oracle查询数据库,JDBC连接Oracle数据库,并操作数据库,查询表
  13. 排队问题解题思路_教育随笔|数学之排队问题
  14. HDOJ--1864--最大报销额
  15. 计算机绘图 电子教案,机械制图与计算机绘图电子教案大全.doc
  16. Foxmail的创建
  17. 凉凉!Tumblr 或被 300 万贱卖
  18. 企业邮箱管理员在哪里找?域名邮箱如何管理?
  19. h5页面使用js实现图片上传(安卓用户也可拍摄、相册二选一)
  20. 如何使用Couchbase实现文档版本控制

热门文章

  1. win10 1903 笔记本开热点出现蓝屏问题
  2. Python计算机视觉编程学习笔记 四 照相机模型与增强现实
  3. 乔姆斯基生成语法_乔姆斯基与生成语法重点分析.ppt
  4. APM,监控界的扛把子,牛逼!
  5. [HDLbits] Conway‘s game of life
  6. 宁做创业狼,不做打工狗!
  7. matlab gpib硬件实例,GPIB板的安装及使用初步.doc
  8. Excel统一将多种段落标记号替换为黑方块的操作
  9. AndroidGradle基础——渠道化配置
  10. 计算机仿真三个基本活动,计算机仿真-Read.ppt