ViewPager+小圆点

package com.example.day13rk;

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

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

private ArrayList<ImageView> imageViews = new ArrayList();
private int[] imageResIds = {
        R.drawable.a,
        R.drawable.b,
        R.drawable.c,
        R.drawable.d,
        R.drawable.e,
};
//图片字符串数组String[]资源.
private String[] descs = {
        "巩俐不低俗,我就不能低俗",
        "扑树又回来啦!再唱经典老歌引万人大合唱",
        "揭秘北京电影如何升级",
        "乐视网TV版大派送",
        "热血屌丝的反杀",
};
private LinearLayout ll_dot;
private TextView viewPager_tv;
private ViewPager viewPager_vp;

Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        switch (msg.what){
            case 0:
                viewPager_vp.setCurrentItem(viewPager_vp.getCurrentItem()+1);
                break;
        }

        handler.sendEmptyMessageDelayed(0,2000);
    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    init();
}

private void init() {
    //找可以设置点的容器LinearLayout的对象,进行点的添加
    ll_dot = findViewById(R.id.ll_dot);
    //找到文本的对象
    viewPager_tv = findViewById(R.id.viewPager_tv);
    //找到VIewPager对象.
    viewPager_vp = findViewById(R.id.viewPager_vp);
    for(int i = 0 ; i < imageResIds.length; i++){
        //创建ImageView对象
        ImageView imageView = new ImageView(this);
        //通过该对象添加图片资源..setBackgroundResource方法
        imageView.setBackgroundResource(imageResIds[i]);
        //把控件添加到集合ImageViews中去,以方便在VIewPager的适配器里instantiateItem方法获取
        imageViews.add(imageView);
        //进行点的添加,其个数和图片的个数一致,因此放到该循环中
        createDot();
    }
    //设置适配器
    viewPager_vp.setAdapter(new MyViewpagerAdapter(MainActivity.this,imageViews));
    //滑动监听
    viewPager_vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int i, float v, int i1) {
            //同过getCurrentItem方法拿到当前用户所交互ViewPager的item位置.
           int currentItem = viewPager_vp.getCurrentItem();
           changeTextAndDot(currentItem%imageResIds.length);
        }
        @Override
        public void onPageSelected(int i) {
            int position = i % imageViews.size();
            viewPager_tv.setText(descs[position]);
        }
        //和用户交互时,state就是ViewPager的状态
        @Override
        public void onPageScrollStateChanged(int state) {
            //如果空闲状态就自动滑动
            if(state == ViewPager.SCROLL_STATE_IDLE){
                handler.sendEmptyMessageDelayed(0,2000);
            }else{
                handler.removeMessages(0);
            }
        }

    });
    //设置左右滑动
    viewPager_vp.setCurrentItem(Integer.MAX_VALUE/2+3);
    handler.sendEmptyMessageDelayed(0,2000);
   /* viewPager_vp.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            return false;
        }
    });*/
}

private void changeTextAndDot(int position) {
    viewPager_tv.setText(descs[position]);
    for(int i = 0; i < imageResIds.length; i++){
        View childAt = ll_dot.getChildAt(i);
        childAt.setBackgroundResource(i == position ?R.drawable.dot_focus:R.drawable.dot_normal);
    }
}

private void createDot() {
    View view = new View(this);
    view.setBackgroundResource(R.drawable.dot_normal);
    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(8,8);
    layoutParams.leftMargin = 8 ;
    view.setLayoutParams(layoutParams);
    ll_dot.addView(view);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    handler.removeMessages(0);
}

}

猜你喜欢

转载自blog.csdn.net/aijaijgnaw/article/details/83386565