一个有趣的效果,自定义LayoutManager实现扇叶布局管理器
有时候,我们想实现一些有趣炫酷的动效,自定义View是第一选择,确实,自定义View无所不能,它能实现你想要的一切。自定义View虽然是万能的,但是它也是最复杂的,有的时候就会想,有没有稍微简单一点的方式,来实现一些好玩的动效呢?有,那就是扩展RecyclerView
,RecyclerView
非常强大,它有着非常好的扩展性,那就是它的布局管理器,只要重写LayoutManager
,就能实现你自己布局管理器。为什么说它比自定义View简单呢?因为我们不用关心事件的处理,RecyclerView
帮我们做好了一切。今天就为大家介绍一个通过自定义LayoutManager
实现的有趣的效果,风扇布局管理器
-FanLayoutManager
FanLayoutManager介绍
使用FanLayoutManager
,你可以实现水平列表,其中的各项像扇叶一样移动(以您选择的半径为圆形的方式)。为了使动作稍微混乱,可以为列表项设置角度。由于简单水平列表的传统视图不再令人印象深刻,因此FanLayoutManager
在视觉上添加一些颜色和全新的运动路径。
废话不多说,先看一下效果:
使用说明
在build.gradle
中添加依赖:
compile 'com.cleveroad:fan-layout-manager:1.0.5'
在代码中,使用FanLayoutManager
默认配置代码如下:
fanLayoutManager = new FanLayoutManager(getContext());
recyclerView.setLayoutManager(fanLayoutManager);
你也可以通过如下代码来选中/取消选中
Item :
fanLayoutManager.switchItem(recyclerView, itemPosition); // select/deselect
fanLayoutManager.deselectItem(); // just deselect
获取选中的position
:
fanLayoutManager.getSelectedItemPosition(); // return selected item position
fanLayoutManager.isItemSelected(); // true if item was selected
当然,你想要自定义一些效果,也是可以,通过FanLayoutManagerSettings
来配置:
FanLayoutManagerSettings fanLayoutManagerSettings = FanLayoutManagerSettings
.newBuilder(getContext())
.withFanRadius(true)
.withAngleItemBounce(5)
.withViewWidthDp(120)
.withViewHeightDp(160)
.build();
fanLayoutManager = new FanLayoutManager(getContext(), fanLayoutManagerSettings);
recyclerView.setLayoutManager(fanLayoutManager);
解释一下相关配置:
withFanRadius(boolean isFanRadiusEnable)
: 启用扇叶效果样式withAngleItemBounce(float angleItemBounce)
: 为[0 - angleItemBounce
)中的项添加了随机跳动角度withViewWidthDp(float viewWidthDp)
-自定义项目的宽度。默认值为120dp
withViewHeightDp(float viewHeightDp)
-自定义项目的高度。默认为160dp
collapseViews()
: 折叠视图straightenSelectedItem(Animator.AnimatorListener listener)
: 移除所选Item的弹跳角效果restoreBaseRotationSelectedItem(Animator.AnimatorListener listener)
: 恢复所选Item的弹跳角效果
以上就是FanLayoutManager
的使用,更多实现细节请看源码:
https://github.com/Cleveroad/FanLayoutManager
---END---
推荐阅读:
Kotlin 调用Java写的方法,参数Class<T> 神坑