常用组件:ViewPager和View的组合

引言

ViewPager 是 android 扩展包 v4 包中的类,这个类可以让用户左右切换当前的 view。ViewPager 直接继承了 ViewGroup,所有它是一个容器类,可以在其中添加其他的 view 类。ViewPager 需要一个 PagerAdapter 适配器类给它提供数据。ViewPager 经常和 Fragment 一起使用,并且提供了专门的 FragmentPagerAdapter 和 FragmentStatePagerAdapter 类供 Fragment 中的 ViewPager 使用。

基本用法

布局写法

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipChildren="false">
 
    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="400dp"
        android:layout_centerInParent="true"
        android:layout_marginLeft="60dp"
        android:layout_marginRight="60dp"
        android:clipChildren="false"></android.support.v4.view.ViewPager>
</RelativeLayout>

适配器定义

public class ManyPictureAdapter extends PagerAdapter {
    private List<Integer> list;
    private Context context;
 
    public ManyPictureAdapter(Context context, List<Integer> list) {
        this.context = context;
        //应用数据
        this.list = list;
    }
 
    @Override
    public int getCount() {
        //支持的view总数
        return list.size();
    }
 
    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }
 
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        ImageView iv = new ImageView(context);
        //设置图片适应xy轴
        iv.setScaleType(ImageView.ScaleType.FIT_XY);
        iv.setImageResource(list.get(position));
        //增加子view到viewpager里
        container.addView(iv);
        return iv;
    }
 
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        //删除子view到viewpager里
        container.removeView((View) object);
    }

调用方法

        ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
        //设置ViewPager中两页之间的距离
        viewPager.setPageMargin(80);
 
      //  设置预加载的页数,我们知道默认情况下这个参数为1,也就是左右各预加载一页,但是我们这里要让左右各预加载两页
        viewPager.setOffscreenPageLimit(3);
        List<Integer> list = new ArrayList<>();
        list.add(R.mipmap.bg_splash1);
        list.add(R.mipmap.bg_splash2);
        list.add(R.mipmap.bg_splash3);
        list.add(R.mipmap.bg_splash4);
        ManyPictureAdapter adater = new ManyPictureAdapter(this, list);
        viewPager.setAdapter(adater);
    //设置切换动画(缩放动画)
        viewPager.setPageTransformer(false, new ScaleTransformer());

以上就是viewpager搭配view的基本写法,view包括 textView,ImageView等功能组件,或者 LinearLayout等容器组件,都是可以的。

常用api

viewPager.setCurrentItem(index);  

滚动到目标页

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {})

添加滚动监听

viewPager.setPageTransformer(false, new ScaleTransformer());

设置页面滚动效果动画

结语

其实用法还是很简单的,给大家一个建议,当需要用这种组合时,直接抄本文的结构改一下,就好了,剩下的都是自己的业务代码了

发布了58 篇原创文章 · 获赞 10 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_34203714/article/details/100996057