Android ViewPager最简单使用
首先,ViewPager已经被淘汰了,目前应该使用ViewPager2。我之所以看这个是有某种原因。
事由:
在网上看到很多关于ViewPager的文章,但是大多数都结合了一些其他的东西,比如shape、Selector,让我这种小白看得云里雾里。真的叫难者不会、会者不难。所以在勉强看懂后,精简了一下。
ViewPager是安卓的一个组件,允许用户左右滑动显示放置在里面的多个View。
PagerAdapter用于向ViewPager中放入多个View。
用法:
一、构建布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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">
    <androidx.viewpager.widget.ViewPager
        android:id="@+id/imagePager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal" />
</LinearLayout>二、自定义一个Adapter类继承自PagerAdapter
一般来说,我们需要为自定义的Adapter类准备一个构造函数,用于保存传入的参数,并且生成需要左右滑动的多个View。
1、需要从活动传入上下文
2、需要传入每个滑动页面的背景图(也可以传入包含背景图的自定义类)
为了简单,我们只传入了背景图的id,因为ImageView也是View的一种,所以就直接在ViewPager中构建了一个List<ImageView>来存放需要滑动的View。
大多数情况下,你需要为滑动页面写一个布局文件,不仅包括背景图,还包括一些按钮什么的。
public class MyPagerAdapter extends PagerAdapter {
    private Context myContext;
    private int[] imageArray;
    private List<ImageView> images;
    public MyPagerAdapter(Context myContext, int[] imageArray) {
        this.myContext = myContext;
        this.imageArray = imageArray;
        images = new ArrayList<>();
        for (int id : imageArray) {
            ImageView view = new ImageView(myContext);
            // 设置图片填满整个容器
            view.setScaleType(ImageView.ScaleType.FIT_XY);
            view.setLayoutParams(new ViewGroup.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT,
                    ViewGroup.LayoutParams.MATCH_PARENT));
            view.setImageResource(id);
            images.add(view);
        }
    }三、重写父类方法
至少需要重写四个父类方法。
1、getCount():返回可滑动的View总数
2、isViewFromObject:判断instantiateItem()函数所返回来的Key与一个页面视图是否同一个视图
3、instantiateItem():装填当前位置的View
4、destroyItem():去除当前位置的View
只要一开始初始化好了View的列表,这四个方法基本上都不需要改动。
    @Override
    public int getCount() {
        return images.size();
    }
    @Override
    public boolean isViewFromObject(@NonNull @NotNull View view, @NonNull @NotNull Object object) {
        return view==object;
    }
    @NonNull
    @NotNull
    @Override
    public Object instantiateItem(@NonNull @NotNull ViewGroup container, int position) {
        ImageView view = images.get(position);
        container.addView(view);
        return view;
    }
    @Override
    public void destroyItem(@NonNull @NotNull ViewGroup container, int position, @NonNull @NotNull Object object) {
        container.removeView(images.get(position));
    }
}四、关联Adapter
简单的通过setAdaper()方法,将ViewPager和自定义的PagerAdapter关联起来。
public class MainActivity extends AppCompatActivity {
    // 定义引导页图片数组
    private int[] imageArray = {R.drawable.yingdao1, R.drawable.yingdao2,
            R.drawable.yingdao3, R.drawable.yingdao4};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ViewPager viewPager = findViewById(R.id.imagePager);
        MyPagerAdapter adapter = new MyPagerAdapter(this, imageArray);
        viewPager.setAdapter(adapter);
    }
}五、还需要做什么
做完上面的部分,就已经可以滑动了。不过很多时候还需要为ViewPager增加一个addOnPageChangeListener()方法,然后重写以下方法,来提供更多的功能:
1、onPageScrolled
 2、onPageSelected
 3、onPageScrollStateChanged
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!