ViewPager联动

<?xml version="1.0" encoding="utf-8"?>

<android.support.constraint.ConstraintLayout xmlns:android=“http://schemas.android.com/apk/res/android
xmlns:app=“http://schemas.android.com/apk/res-auto
xmlns:tools=“http://schemas.android.com/tools
android:layout_width=“match_parent”
android:layout_height=“match_parent”
tools:context=".MainActivity">

<android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="200dp"/>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#88000000"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    android:layout_alignBottom="@+id/pager">
    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#000"
        android:text="111111111111111"/>
    <LinearLayout
        android:id="@+id/line"
        android:orientation="horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
       <!-- <View
            android:layout_width="5dp"
            android:layout_height="5dp"
            android:background="@drawable/dot_normal"/>-->
    </LinearLayout>
</LinearLayout>

</android.support.constraint.ConstraintLayout>
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 ViewPager pager;
private TextView text;
private LinearLayout line;
private int[] imageids;
private ArrayList<ImageView> list;
private String[] desc;

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

private void initData() {
    pager = findViewById(R.id.pager);
    text = findViewById(R.id.text);
    line = findViewById(R.id.line);
    imageids = new int[]{R.drawable.a,R.drawable.b,R.drawable.c,R.drawable.d,R.drawable.e};
    list = new ArrayList<>();
    desc = new String[]{
            "巩俐不低俗,我就不能低俗",
            "扑树又回来啦!再唱经典老歌引万人大合唱",
            "揭秘北京电影如何升级",
            "乐视网TV版大派送",
            "热血屌丝的反杀"
    };
    for (int i = 0; i < imageids.length ; i++){
        ImageView image = new ImageView(this);
        image.setBackgroundResource(imageids[i]);
        list.add(image);
        //自定义小圆点
        //创建一个View对象;
        View view = new View(this);
        //为这个View对象设置背景setBackgroundResource
        view.setBackgroundResource(R.drawable.dot_normal);
        //为View对象设置宽高参数,使用参数对象LayoutParams(int,int),给哪个容器,就用哪个容器创建
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(8, 8);
        //使用参数对象LayoutParams.leftMargin=int,相当于布局里的padding.
        params.leftMargin = 5;
        //把准备好的layoutParams参数对象,设置给View对象.setLayoutParams
        view.setLayoutParams(params);
        //最后容器对象.addView(VIwe);
        line.addView(view);
    }
    //适配器
    MyAdapter adapter = new MyAdapter(list);
    pager.setAdapter(adapter);
    //设置ViewPager的滑动监听器,addOnPageChangeListener,set的方法因为名字的原因被淘汰了
    pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int i, float v, int i1) {
            //通过getCurrentItem方法拿到当前用户所交互ViewPager的item位置.
            int currentItem = pager.getCurrentItem();
            //根据ViewPager的item的变化,设置对应的文本
            text.setText(desc[currentItem%list.size()]);
            //对点进行判断是否是当前页的点,用for循环,拿到所有点的位置,然后和position对比
            for (int j = 0 ; j < imageids.length ; j++){
                //.getChildAt(x);拿到容器的子控件.得到VIew对象
                View childAt = line.getChildAt(j);
                //为View设置背景图片,,使用三元运算符.
                childAt.setBackgroundResource(j==i%list.size()?R.drawable.dot_focus:R.drawable.dot_normal);
            }
        }

        @Override
        public void onPageSelected(int i) {

        }

        @Override
        public void onPageScrollStateChanged(int i) {
            /*if(i == ViewPager.SCROLL_STATE_IDLE){
                handler.sendEmptyMessageDelayed(0,2000);
            }else{
                handler.removeMessages(0);
            }*/
        }
    });

    handler.sendEmptyMessage(0);
    //给viewpager设置触摸事件
    pager.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;
        }
    });
    //可以左右滑动
    pager.setCurrentItem(Integer.MAX_VALUE/2-4);
}
Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        switch (msg.what){
            case 0:
                int i = pager.getCurrentItem();
                pager.setCurrentItem(i+1);
                handler.sendEmptyMessageDelayed(0, 2000);
                break;
        }
    }
};

}

//适配器
import android.support.annotation.NonNull;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import java.util.ArrayList;

public class MyAdapter extends PagerAdapter {

private ArrayList<ImageView> list;

public MyAdapter(ArrayList<ImageView> list) {
    this.list = list;
}

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

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

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

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

}

//当图片小于3张时,解决 java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child’s parent first.
在ViewPager的适配器中修改
提前销毁

@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
int size = position % list.size();
ImageView imageView = list.get(size);
if (imageView.getParent()!=null){
((ViewPager)imageView.getParent()).removeView(imageView);
}
((ViewPager)container).addView(imageView,0);
//container.addView(imageView);
return imageView;
}

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

猜你喜欢

转载自blog.csdn.net/weixin_42791904/article/details/83109895
今日推荐