肥城网站开发公司,哪家建站好,长沙优化网站技巧,辽宁住房和城乡建设厅网站首先#xff0c;ViewPager已经被淘汰了#xff0c;目前应该使用ViewPager2。我之所以看这个是有某种原因。
事由#xff1a;
在网上看到很多关于ViewPager的文章#xff0c;但是大多数都结合了一些其他的东西#xff0c;比如shape、Selector#xff0c;让我这种小白看得…首先ViewPager已经被淘汰了目前应该使用ViewPager2。我之所以看这个是有某种原因。
事由
在网上看到很多关于ViewPager的文章但是大多数都结合了一些其他的东西比如shape、Selector让我这种小白看得云里雾里。真的叫难者不会、会者不难。所以在勉强看懂后精简了一下。
ViewPager是安卓的一个组件允许用户左右滑动显示放置在里面的多个View。
PagerAdapter用于向ViewPager中放入多个View。
用法
一、构建布局
?xml version1.0 encodingutf-8?
LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoxmlns:toolshttp://schemas.android.com/toolsandroid:layout_widthmatch_parentandroid:layout_heightmatch_parenttools:context.MainActivityandroidx.viewpager.widget.ViewPagerandroid:idid/imagePagerandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:orientationhorizontal //LinearLayout
二、自定义一个Adapter类继承自PagerAdapter
一般来说我们需要为自定义的Adapter类准备一个构造函数用于保存传入的参数并且生成需要左右滑动的多个View。
1、需要从活动传入上下文
2、需要传入每个滑动页面的背景图也可以传入包含背景图的自定义类
为了简单我们只传入了背景图的id因为ImageView也是View的一种所以就直接在ViewPager中构建了一个ListImageView来存放需要滑动的View。
大多数情况下你需要为滑动页面写一个布局文件不仅包括背景图还包括一些按钮什么的。
public class MyPagerAdapter extends PagerAdapter {private Context myContext;private int[] imageArray;private ListImageView 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的列表这四个方法基本上都不需要改动。 Overridepublic int getCount() {return images.size();}Overridepublic boolean isViewFromObject(NonNull NotNull View view, NonNull NotNull Object object) {return viewobject;}NonNullNotNullOverridepublic Object instantiateItem(NonNull NotNull ViewGroup container, int position) {ImageView view images.get(position);container.addView(view);return view;}Overridepublic 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};Overrideprotected 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