动态添加ViewPager

//布局

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

<LinearLayout
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:layout_alignBottom="@+id/ViewPager_vp"
    android:gravity="center_horizontal"
    android:padding="8dp"
    android:orientation="vertical"
    android:background="#88000000">

    <TextView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:id="@+id/ViewPager_tv"
        android:text="我是杨政"
        android:textColor="@android:color/white"/>

        <LinearLayout
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:id="@+id/ll_dot"
            android:orientation="horizontal">

       </LinearLayout>

</LinearLayout>
//main方法 public class MainActivity extends AppCompatActivity {
private LinearLayout ll_dot;
private TextView ViewPager_tv;
private ViewPager ViewPager_vp;

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

private Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        switch (msg.what){
            case 0:
                int currentItem = ViewPager_vp.getCurrentItem();
                if (currentItem == imageResIds.length-1){
                    currentItem = 0;
                }else {
                    currentItem++;
                }
                ViewPager_vp.setCurrentItem(currentItem);
                sendEmptyMessageDelayed(0,2000);
                break;
        }
    }
};

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

    //初始化控件
    initView();
}

private void initView() {
    //找到可以设置点的容器LinearLayout的对象,进行点的添加
    ll_dot = findViewById(R.id.ll_dot);
    ViewPager_tv = findViewById(R.id.ViewPager_tv);
    ViewPager_vp = findViewById(R.id.ViewPager_vp);

    //更加图片int数组资源的数量,动态的创建ImageView控件.就是有几张图片,创建几个ImageView,for循环
    for (int x = 0; x < imageResIds.length; x++) {
        //创建ImageView对象
        ImageView imageView = new ImageView(this);
        //通过该对象添加图片资源..setBackgroundResource方法.
        imageView.setBackgroundResource(imageResIds[x]);
        //把控件添加到集合ImageViews中去,以方便在VIewPager的适配器里instantiateItem方法获取.
        ImageViews.add(imageView);
        //进行点的添加,其个数和图片的个数一致,因此放到该循环中,
        createDot(x);
    }

    //创建适配器
    adapter = new MyPageAdapter(ImageViews,MainActivity.this);
    //设置适配器
    ViewPager_vp.setAdapter(adapter);

    handler.sendEmptyMessageDelayed(0,2000);

    ViewPager_vp.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,2000);
                    break;
            }
            return false;
        }
    });


    //设置ViewPager的滑动监听器,addOnPageChangeListener,set的方法因为名字的原因被淘汰了
    ViewPager_vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            //同过getCurrentItem方法拿到当前用户所交互ViewPager的item位置.
            int currentItem = ViewPager_vp.getCurrentItem();
            //通过得到的这个item,给text和点进行选中的设置.
            changeTextandDot(currentItem);
        }
        @Override
        public void onPageSelected(int position) {

        }
        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

}

private void changeTextandDot(int position) {
    //根据ViewPager的item的变化,设置对应的文本.setText(descs[position]);
    ViewPager_tv.setText(descs[position]);
    //对点进行判断是否是当前页的点,用for循环,拿到所有点的位置,然后和position对比
    for(int x=0; x< imageResIds.length; x++){
        //.getChildAt(x);拿到容器的子控件.得到VIew对象
        View childAt = ll_dot.getChildAt(x);
        //为View设置背景图片,,使用三元运算符.
        childAt.setBackgroundResource(x==position?R.drawable.dot_focus:R.drawable.dot_normal);
    }
}

private void createDot(int x) {
    //创建一个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_dot.addView(view);
}

//适配
public class MyPageAdapter extends PagerAdapter {
private List imageViews;
private Context context;

public MyPageAdapter(List<ImageView> imageViews, Context context) {
    this.imageViews = imageViews;
    this.context = context;
}

@Override
public int getCount() {
    return imageViews.size();
}

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

@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
    ImageView imageView = imageViews.get(position);
    container.addView(imageView);
    return imageView;
}

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

}

猜你喜欢

转载自blog.csdn.net/qq_43169246/article/details/83142407