查看原文
其他

一个有趣的效果,自定义LayoutManager实现扇叶布局管理器

西哥 技术最TOP 2022-08-26


有时候,我们想实现一些有趣炫酷的动效,自定义View是第一选择,确实,自定义View无所不能,它能实现你想要的一切。自定义View虽然是万能的,但是它也是最复杂的,有的时候就会想,有没有稍微简单一点的方式,来实现一些好玩的动效呢?有,那就是扩展RecyclerViewRecyclerView 非常强大,它有着非常好的扩展性,那就是它的布局管理器,只要重写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---

推荐阅读:

17年的圣诞帽,今天的换国旗,又一波史诗级的流量收割

不要总是相信 @JvmOverloads

Kotlin 调用Java写的方法,参数Class<T> 神坑

每一个“在看”,我都当成真的喜欢

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存