ViewPager2简介
距离ViewPager2正式版发布已经有将近一个月的时间,我们一起来看看吧。
ViewPager2是为了解决ViewPager,包括从右到左的布局支持、垂直方向、可修改的Fragment等一些痛点
核心方法
从源码来看,ViewPager2核心是通过RecyclerView和LinearLayoutManager实现的,看到这里已经看破了,在没有ViewPager2的时候,我们就经常使用RecyclerView来实现轮播图,这次算是官方给你实现了。
再一个就是PagerSnapHelper了。
PagerSnapHelper是继承自SnapHelper的。用于辅助RecyclerView在滚动结束时将Item对齐到某个位置,特别是列表横向滑动时,很多时候不会让列表滑到任意位置,而是会有一定的规则限制,这时候就可以通过SnapHelper来定义对齐规则了。
具体关于SnapHelper的原理可以参考这位大佬的文章,点这里。
常用Api
- 添加修饰线
void addItemDecoration(RecyclerView.ItemDecoration decor)
- 添加修饰线(index:如果此值为负,则将在末尾添加装饰。)
void addItemDecoration(RecyclerView.ItemDecoration decor, int index)
- 开始模拟滑动
void beginFakeDrag()
- 结束模拟滑动
endFakeDrag()
- 设置滑动方向(垂直/水平)
void setOrientation(int orientation)
- 禁止滑动
void setUserInputEnabled(boolean enabled)
- 获取当前页面
int getCurrentItem()
- 设置显示页面
void setCurremt(int item)
- 获取适配器
getAdapter()
- 设置缓存
setOffscreenPageLimit(int limit)
- 设置ViewPager的切换动画
setPageTransformer(ViewPager2.PageTransformer transformer)
- 页面回调(同
addPageChangeListener)registerOnPageChangeCallback(OnPageChangeCallback).
- 删除回调
unregisterOnPageChangeCallback(ViewPager2.OnPageChangeCallback callback)
同时,ViewPager2还支持局部刷新
notifyDataSetChanged();
notifyItemChanged(int position)
使用
@Override
public void onClick(View v) {
case R.id.vertical:
mViewPager2.setOrientation(ViewPager2.ORIENTATION_VERTICAL);
break;
case R.id.horizontal:
mViewPager2.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL);
break;
case R.id.userScroll:
mViewPager2.setUserInputEnabled(!isChecked);
break;
case R.id.rotateCheckBox:
//旋转
mViewPager2.requestTransform();
break;
case R.id.translateCheckBox:
//平移
mViewPager2.requestTransform();
break;
case R.id.scaleCheckBox:
//缩放
mViewPager2.requestTransform();
break;
}
}
欢迎讨论!