この質問は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()
}