Closed REBOOTERS closed 4 years ago
ExpandableRecyclerView和ExpandableListView相比的优点:
ExpandableListView
默认是没有展开和关闭动画,第三方实现有了动画,大部分都是通过设置View.height 来实现动画效果的。这种方式实现的动画比较卡,每一帧都需要测量,布局和绘制,如果遇到Item比较复杂,会出现动画卡顿或抖动。 ExpandableRecyclerView 动画是通过属性动画实现的,每一帧只有部分重绘,不会重新测量和布局,动画更加流畅。
性能的测量方式
比如对比https://github.com/idunnololz/AnimatedExpandableListView 这个库,把ItemView放一个HeavyTextView ,打开手机的HWUI渲染模式,通过比较AnimatedExpandableListView ,ExpandableRecyclerView,展开和关闭动画,就能发现ExpandableRecyclerView在动画的执行过程中非常流畅。
/** * 测量比较耗时的TextView,用来模拟性能问题 */ class HeavyTextView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 ) : TextView(context, attrs, defStyleAttr) {
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
SystemClock.sleep(3);// 模拟测量耗时
super.onMeasure(widthMeasureSpec, heightMeasureSpec)
}
}
😯,厉害了,回头替换一波试试。
有一些场景需要这种控件,不知道和系统自带的相比是否有优化。