ViewPager图片自动轮播带小圆点

版权声明:叮叮叮!!!! https://blog.csdn.net/Xuexx_520/article/details/83187389
package com.example.xxx.day11_viewpager;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.example.xxx.day11_viewpager.adapter.ViewPagerAdapter;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    private ViewPager viewPager;
    private String[] texts={
                "巩俐不低俗,我就不能低俗",
                "扑树又回来啦!再唱经典老歌引万人大合唱",
                "揭秘北京电影如何升级",
                "乐视网TV版大派送",
                "热血屌丝的反杀",
    };
   private ArrayList<Integer> list;
   private TextView tv;
   private LinearLayout ll_dots;
   private ViewPagerAdapter adapter;
  Handler handler=new Handler(){
      @Override
      public void handleMessage(Message msg) {
          super.handleMessage(msg);
          int currentItem=viewPager.getCurrentItem();
          currentItem++;
          viewPager.setCurrentItem(currentItem);
          handler.sendEmptyMessageDelayed(0,2000);
      }
  };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化控件
        initView();

        //初始化图片数据
        initData();
        adapter=new ViewPagerAdapter(MainActivity.this,list);
        viewPager.setAdapter(adapter);
        //解决无法向左滑动的问题
        viewPager.setCurrentItem(list.size()*1000);
        //设置ViewPager的滑动监听器,addOnPageChangeListener,set的方法因为名字的原因被淘汰了
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int i, float v, int i1) {
                //同过getCurrentItem方法拿到当前用户所交互ViewPager的item位置.

                //通过得到的这个item,给text和点进行选中的设置.
                changeDotText(i);
                Log.e("scr", i+"" );
                Log.e("get", viewPager.getCurrentItem()+"" );
            }

            @Override
            public void onPageSelected(int i) {
                Log.e("sel", i+"" );
            }

            @Override
            public void onPageScrollStateChanged(int i) {

            }
        });
       viewPager.setOnTouchListener(new View.OnTouchListener() {
           @Override
           public boolean onTouch(View v, MotionEvent event) {
               switch (event.getAction()){
                   case MotionEvent.ACTION_DOWN:
                       //当鼠标按下停止发送
                       handler.removeMessages(0);
                       break;
                   case MotionEvent.ACTION_MOVE:
                       //当鼠标在上面移动停止发送
                       handler.removeMessages(0);

                       break;
                   case MotionEvent.ACTION_UP:
                       //当鼠标抬起三秒以上开始自动轮播
                       handler.sendEmptyMessageDelayed(0,3000);
                       break;

               }
               return false;
           }
       });
        handler.sendEmptyMessageDelayed(0,2000);
    }
    /**
     * 根据ViewPager的item的变化,也就是图片切换的操作,设置对应的点和文本.
     * @param  currentitem int ViewPager的item,也是图片的位置
     */
    private void changeDotText(int currentitem) {
        //根据ViewPager的item的变化,设置对应的文本.setText(descs[position]);
        tv.setText(texts[currentitem%list.size()]);
        //对点进行判断是否是当前页的点,用for循环,拿到所有点的位置,然后和position对比

        for(int j=0;j<list.size();j++){
            //.getChildAt(x);拿到容器的子控件.得到VIew对象
            View dot=ll_dots.getChildAt(j);
            //为View设置背景图片,,使用三元运算符.如果是当前页面则圆点变红
            dot.setBackgroundResource(j==currentitem%list.size()?R.drawable.dot_focus:R.drawable.dot_normal);
        }

    }

    @Override
    protected void onPause() {
        super.onPause();
        handler.removeCallbacksAndMessages(null);
    }

    private void initData() {
        //添加图片
        list=new ArrayList<>();
        list.add(R.drawable.a);
        list.add(R.drawable.b);
        list.add(R.drawable.c);
        list.add(R.drawable.d);
        list.add(R.drawable.e);
        for(int i=0;i<list.size();i++){
            //图片数量是多少,添加多少动态小圆点
            addDot(i);
        }


    }
    /**
     * 动态创建点
     */
    private void addDot(int i) {
        //创建一个View对象;
        View view=new View(this);
        //为这个View对象设置背景setBackgroundResource
        view.setBackgroundResource(R.drawable.dot_normal);
        //为View对象设置宽高参数,使用参数对象LayoutParams(int,int),给哪个容器,就用哪个容器创建
        LinearLayout.LayoutParams layoutParams=new LinearLayout.LayoutParams(8,8);
        //使用参数对象LayoutParams.leftMargin=int,相当于布局里的padding.
        layoutParams.leftMargin=8;
        //把准备好的layoutParams参数对象,设置给View对象.setLayoutParams
        view.setLayoutParams(layoutParams);
        //最后容器对象.addView(VIwe);
        ll_dots.addView(view);

    }

    private void initView() {
        viewPager=findViewById(R.id.viewpager);
        tv=findViewById(R.id.tv);
        ll_dots=findViewById(R.id.ll_dots);



    }
}

猜你喜欢

转载自blog.csdn.net/Xuexx_520/article/details/83187389