我看到这个问题是在 7 年零 6 个月前提出的,但今天我自己也遇到了,创建自定义子视图对我来说似乎有点麻烦。
我发现使用自定义外部布局似乎可以解决问题,您必须重写 attachLayoutAnimationParameters。对于属于布局动画的每个子视图都会调用此方法,并且在 ViewGroup 中实际触发布局动画时调用此方法。它将 AnimationLayoutParams 附加到孩子,在这种情况下它是动画的。所以简单地说,如果你不给一个孩子附加任何 LayoutAnimation 参数,它就不会成为布局动画的一部分。
class CustomLayout @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr) {
private val excludeForLayoutAnimation by lazy {
listOfNotNull(findViewById(R.id.text), findViewById(R.id.fab))
}
override fun attachLayoutAnimationParameters(
child: View?,
params: ViewGroup.LayoutParams?,
index: Int,
count: Int
) {
if (child !in excludeForLayoutAnimation) {
super.attachLayoutAnimationParameters(child, params, index, count)
}
}
}
如果您现在只是在外部自定义视图上调用它,它将排除您指定的子视图:
customView?.apply {
layoutAnimation = AnimationUtils.loadLayoutAnimation(
context,
R.anim.layout_animation_fade_in
)
scheduleLayoutAnimation() // or maybe startLayoutAnimation()
}