ViewPager就是每个Pager配置不同的View,通过左右滑动可以切换View。介绍几种我用过的ViewPager的用法。
一、常规用法
左右滑动的View,使用Adapter配置View即可。
页面xml代码
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewPager1"
android:layout_width="match_parent"
android:background="#999999"
android:layout_height="150dp"/>
viewPager的View里面就是放了一个TextView,adapter实现如下
public class RegularPagerAdapter extends PagerAdapter {
private Context context;
private List<String> dataList;
public RegularPagerAdapter(Context context, List<String> datas) {
this.context = context;
this.dataList = datas;
}
@Override
public int getCount() {
return dataList.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
return view == o;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
// super.destroyItem(container, position, object);必须删除,否则报错
container.removeView((View) object);
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup viewGroup, int position) {
ItemPagerRegularBinding binding = DataBindingUtil.bind(LayoutInflater.from(context).inflate(R.layout.item_pager_regular, viewGroup, false));
binding.tvName.setText(dataList.get(position));
viewGroup.addView(binding.getRoot());
return binding.getRoot();
}
}
activity中使用
private void setRegularPager() {
List<String> dataList = new ArrayList<>();
for (int i = 0; i < 4; i++) {
dataList.add("这是我的第" + (i + 1) + "个Pager");
}
RegularPagerAdapter adapter = new RegularPagerAdapter(this, dataList);
mBinding.viewPager1.setAdapter(adapter);
}
页面实现效果
二、上下滑动的ViewPager
ViewPager默认的滑动方向是左右滑动,但是有时候需要实现上下滑动的方式。那就继承ViewPager实现一个VerticalViewPager。这个代码是在网上找的别人实现的,可以拿过来直接用。
public class VerticalViewPager extends ViewPager {
public VerticalViewPager(Context context) {
super(context);
init();
}
public VerticalViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
// 最重要的设置,将viewpager翻转
setPageTransformer(true, new VerticalPageTransformer());
// 设置去掉滑到最左或最右时的滑动效果
setOverScrollMode(OVER_SCROLL_NEVER);
}
private class VerticalPageTransformer implements PageTransformer {
@Override
public void transformPage(View view, float position) {
if (position < -1) { // [-Infinity,-1)
// 当前页的上一页
view.setAlpha(