无限自动轮播+自定义小圆点

此代码实现:
首先无限轮播的实现,
当按住轮播图时,无限轮播停止 ,可以滑动图片, 小圆点跟着改变
当停止滑动时,有实现自动轮播

一.设置小圆点
在drawable 目录下 创建shape 文件:
创建两个文件:
point_selected.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval"
   >

    <solid android:color="#f00"></solid>
</shape>

point_un_selected.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
       <solid android:color="#ccc"></solid>
</shape>

二.布局

 <android.support.v4.view.ViewPager
      android:id="@+id/vp"
        android:layout_width="match_parent"
        android:layout_height="match_parent">


    </android.support.v4.view.ViewPager>


    <LinearLayout
        android:id="@+id/lin"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_alignBottom="@+id/vp"
        android:gravity="center"
        android:layout_marginBottom="7dp"
        >
    </LinearLayout>

三.main方法:

private ViewPager vp;
    private ImageView imageView;
    //存放图片地址的集合
    List<String> list = new ArrayList<>();
    //存放小圆点的集合
    List<ImageView> imageViews;
    private LinearLayout linearLayout;
    private Handler  handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            //获取当前正在显示的页面
               int index = vp.getCurrentItem();
             //设置显示的页面
                vp.setCurrentItem(index+1);
            //改变小圆点
               setSelectedPoint(index%list.size());
            //延迟发送消息
                sendEmptyMessageDelayed(1,2000);
             }
    };


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获取控件
        vp = (ViewPager) findViewById(R.id.vp);
        linearLayout = (LinearLayout) findViewById(R.id.lin);
        //向集合中添加地址
        list.add("http://img4.imgtn.bdimg.com/it/u=691759172,804438098&fm=214&gp=0.jpg");
        list.add("http://k.zol-img.com.cn/sjbbs/7099/a7098662_s.jpg");
        list.add("http://f2.topitme.com/2/44/48/11321074391a748442o.jpg");

        //初始化小圆点圆点
        initdata();
        //设置适配器
        vp.setAdapter(new Myadapter());
        //设置当前显示页面(可以左右滑动)
        vp.setCurrentItem(list.size()*100);
         //实现自动播放
        handler.sendEmptyMessageDelayed(1,2000);


 //切换页面监听
        vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                   //设置小圆点
                     setSelectedPoint(position%list.size());
            }

            @Override
            public void onPageSelected(int position) {

            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });



        //触摸监听
        vp.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {

                int action=event.getAction();

                switch (action){
                    case MotionEvent.ACTION_DOWN:
                        Log.d("zzz","--按下--");

                        //清空handler消息
                          handler.removeCallbacksAndMessages(null);
                        break;
                    case MotionEvent.ACTION_UP:
                        Log.d("zzz","--抬起--");
                    //当停止触摸时,重新发消息 无限轮播
                        handler.sendEmptyMessageDelayed(1,2000);
                        break;
                    case MotionEvent.ACTION_MOVE:
                        Log.d("zzz","--移动--");
                        break;
                    case MotionEvent.ACTION_CANCEL:
                        Log.d("zzz","--取消--");
                        break;
                }
                     return false;

                    }
        });
}


 //适配器
    class   Myadapter  extends PagerAdapter{


        @Override
        public int getCount() {
            return Integer.MAX_VALUE;
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view==object;
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            ImageView imageView = new ImageView(MainActivity.this);

             imageView.setScaleType(ImageView.ScaleType.FIT_XY);
            //从网络上获取图片 ,需要到入一个Myapp的工具类
            ImageLoader.getInstance().displayImage(list.get(position%list.size()),imageView,MyApp.getDefaultDisplayOption());

             container.addView(imageView);

            return imageView;
        }


        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
           // super.destroyItem(container, position, object);
             container.removeView((View) object);
        }
    }



    //设置小圆点的方法
    public void  setSelectedPoint(int index)
    {

        for (int  i=0;i<imageViews.size();i++)
        {
            if(i==index)
            {
                imageViews.get(i).setImageResource(R.drawable.point_selected);
            }else
            {
                imageViews.get(i).setImageResource(R.drawable.point_un_selected);
            }
        }

}





   //初始化小圆点 动态
    public  void  initdata()
    {
        //创建存放小圆点的集合
        imageViews = new ArrayList<>();

        for(int i=0;i<list.size();i++)
        {
            imageView = new ImageView(this);
         //设置图片的缩放模式
            imageView.setScaleType(ImageView.ScaleType.FIT_XY);
            //设置要显示的图片
            if(i==0)
            {
              imageView.setImageResource(R.drawable.point_selected);
            }else{
              imageView.setImageResource(R.drawable.point_un_selected);
            }
           //设置宽度与高度
            LinearLayout.LayoutParams Params = new LinearLayout.LayoutParams(40, 40);
            Params.setMargins(10,0,10,0);
            //添加到底部容器中
            linearLayout.addView(imageView,Params);
            //添加到集合中
            imageViews.add(imageView);
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值