Ant*_*adz 4 android android-animation android-constraintlayout
有没有人知道为什么constraintlayout.widget.GroupTransitionManager 的动画可见性不起作用?这个小部件不是为这些东西制作的吗?
如果在将视图与组分离后隐藏或显示项目,它会起作用
<androidx.constraintlayout.widget.Group
android:id="@+id/cardHeadersGroup"
android:layout_width="0dp"
android:layout_height="0dp"
android:visibility="invisible"
app:constraint_referenced_ids="cardSystemHeader,cardSimpleHeader,cardCombinedHeader"
app:layout_constraintBottom_toBottomOf="@+id/cardCombinedHeader"
app:layout_constraintEnd_toEndOf="@+id/cardSystemHeader"
app:layout_constraintStart_toStartOf="@+id/cardSimpleHeader"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible"/>
Run Code Online (Sandbox Code Playgroud)
val headersGroup = binding.cardHeadersGroup
val slideIn = Slide()
slideIn.slideEdge = Gravity.BOTTOM
slideIn.mode = Slide.MODE_IN
slideIn.addTarget(headersGroup)
TransitionManager.beginDelayedTransition(binding.root as ViewGroup, slideIn)
headersGroup.visibility = VISIBLE
Run Code Online (Sandbox Code Playgroud)
我最近一直在使用TransitionManager并且ConstraintLayout.Group发现它非常有问题。
最终我决定转储整个ConstraintLayout.Group并创建一个代码AnimationGroup(类似于in-xml ConstraintLayout.Group):
class AnimationGroup(vararg val views: View) {
var visibility: Int = View.INVISIBLE
set(value) {
views.forEach { it.visibility = value }
field = value
}
}
Run Code Online (Sandbox Code Playgroud)
和一个扩展函数Transition:
private fun Transition.addTarget(animationGroup: AnimationGroup) {
animationGroup.views.forEach { viewInGroup -> this.addTarget(viewInGroup) }
}
Run Code Online (Sandbox Code Playgroud)
这样您就可以执行以下操作(几乎完全相同的代码,但更简单的 xml - no ConstraintLayout.Group):
val headersGroup = AnimationGroup(
binding.cardSystemHeader,
binding.cardSimpleHeader,
binding.cardCombinedHeader
)
val slideIn = Slide()
slideIn.slideEdge = Gravity.BOTTOM
slideIn.mode = Slide.MODE_IN
slideIn.addTarget(headersGroup)
TransitionManager.beginDelayedTransition(binding.root as ViewGroup, slideIn)
headersGroup.visibility = VISIBLE
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1686 次 |
| 最近记录: |