ViewPager2Demo
特点功能
完全脱离 xml,所有效果只需要通过 api 调用
具体功能:
1. 两句代码实现抖音列表效果
2. 无感且丝滑,动态从头部或者底部加载数据
3. 设置上下加载监听,再达到预加载 limit 的时候触发监听
4. 实现数据源接口,和 Fragment 接口,你会体验到什么是丝滑
5. 画廊的实现,不再需要在 xml 设置 clipChildren 属性,调用即可实现。
6. 极限脱离 xml 控制,以简化使用者使用
SmartViewPager2Adapter 动态
Demo
为录制流畅,截图分辨率比较模糊。可在下方扫描二维码下载 apk
效果展示
为录制流畅,截图分辨率模糊。可下载 apk 查看真机效果
基础功能展示
|几句代码实现抖音列表|向上或向下加载数据|设置加载监听| |:---:|:---:|:---:| |
|
|
画廊功能展示
|asGallery 一句代码搞定|3d 画廊| |:---:|:---:| |
|
添加依赖
- 项目 build.gradle 添加如下
allprojects { repositories { maven { url 'https://jitpack.io' } } }
- app build.gradle 添加如下
dependencies { implementation 'com.github.lihangleo2:SmartViewPager2Adapter:1.0.2' }
基本使用
一、两句代码实现抖音效果
使用此库,你只需在 xml 加上简单的 viewPager2 即可,其他只需调用方法即可
1.1、步骤一:初始化 adapter
private val mAdapter by lazy {
SmartViewPager2Adapter(this, mBinding.viewPager2)
.cancleOverScrollMode()
.setOffscreenPageLimit(5)
.setPreLoadLimit(3)
.addFragment(1, ImageFragment::class.java)
.addFragment(2, TextFragment::class.java)
//可以在这里初始化数据
.addData(list)
}
1.2、步骤二:设置给 viewpager2(做完这下就搞定了,你没看错)
mBinding.viewPager2.adapter = mAdapter
1.3、步骤三:list 数据源(注意点);bean 对象要实现接口:SmartFragmentTypeExEntity
解析数据 bean 要实现 SmartFragmentTypeExEntity 接口,返回你在 adapter 里要生成的 fragment 的 type。(也就是说 type==1 时生成图片 fragment,这些逻辑 adapter 帮你操作了)
public class SourceBean implements SmartFragmentTypeExEntity {
int type;
@Override
public int getFragmentType() {
return type;
}
}
1.4、步骤四:fragment(注意点)
- 可以看到方法.addFragment(type, Fragment.class),这里结合步骤三就很清楚了。
- 比如上面的基础使用里调用了.addFragment(1, ImageFragment::class.java)。最后加载了数据.addData(list),这样 adapter 会自动在数据里找到对应的 tyep,然后生成你要的 fragment。
注意你的 fragment 必须实现 SmartFragmentImpl 接口,这个接口是让 adapter 把数据回传给你,以便你做页面操作
public class ImageFragment extends Fragment implements SmartFragmentImpl {
//....伪代码
@Override
public void initSmartFragmentData(SmartFragmentTypeExEntity bean) {
this.mSourceBean = bean as SourceBean
}
}
二、画廊效果
画廊只需要加上如下代码,无需在 xml 里写 clipChildren="false"这些代码,解放 xml
//如果是横向就是左右,竖直的话就是上下。adapter 会自己判断
.asGallery(int leftMargin,int rightMargin)
//想要加上滑动效果只需要加上(后续会加上更多效果)
setPagerTransformer(SmartTransformer.TRANSFORMER_ALPHA_SCALE)
三、方法详解
这里我会把重要的方法拿出来讲,其他的会出个表格
3.1 数据加载
向下无感加载数据
.addData(List<SmartFragmentTypeExEntity> list)
向上无感加载数据
.addFrontData(List<SmartFragmentTypeExEntity> list)
加载对应 type 的 fragment.class
.addFragment(type, Fragment.class)
3.2 设置监听
设置头部加载监听(不设置则不触发)
.setOnRefreshListener(OnRefreshListener listener)
设置底部加载监听(不设置则不触发)
.setLoadMoreListener(OnLoadMoreListener listener)
同时设置头部和底部监听(不设置则不触发)
.setOnRefreshLoadMoreListener(OnRefreshLoadMoreListener listener)
3.2 结束监听
头部已经不能翻页时,调用。将不再触发头部监听。
.finishRefreshWithNoMoreData()
底部已经不能翻页时,调用。将不再触发底部监听。
.finishLoadMoreWithNoMoreData()
3.3 ViewPager2 滑动效果
- SmartTransformer.TRANSFORMER_3D 3d 滑动效果
- SmartTransformer.TRANSFORMER_ALPHA_SCALE 缩放透明度效果
.setPagerTransformer(SmartTransformer enum)
其他方法
|name|format|description|
|:---:|:---:|:---:|
|.getDataList()|List\
赞赏
如果你喜欢 SmartViewPager2Adapter 的功能,感觉 SmartViewPager2Adapter 帮助到了你,可以点右上角 "Star" 支持一下 谢谢! ^_^ 你也还可以扫描下面的二维码~ 请作者喝一杯咖啡。或者遇到工作中比较难实现的需求请作者帮忙。
如果在捐赠留言中备注名称,将会被记录到列表中~ 如果你也是 github 开源作者,捐赠时可以留下 github 项目地址或者个人主页地址,链接将会被添加到列表中
捐赠列表
其他作品
关于作者。
Android 工作多年了,如果你在学习的路上也感觉孤独,请和我一起。让我们在学习道路上少些孤独
Licenses
MIT License
Copyright (c) 2023 leo
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.