【问题标题】:Overlapping TransitionManager animations in android在android中重叠TransitionManager动画
【发布时间】:2020-05-31 11:51:15
【问题描述】:
我正在尝试在 TransitionManager 动画的帮助下展开和折叠我的视图。以下是输出,
在折叠顶视图时查看重叠布局。如何避免这种情况?我设置了“detailedView”(带有图标)可见性GONE 并使用以下代码进行动画,
topView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TransitionManager.beginDelayedTransition(topView);
TransitionManager.beginDelayedTransition(bottomView);
if (detailsView.getVisibility() == View.VISIBLE) {
detailsView.setVisibility(View.GONE);
cardText.setText("Collapse Title");
} else {
detailsView.setVisibility(View.VISIBLE);
cardText.setText("Expanded Title");
}
}
});
【问题讨论】:
标签:
android
android-animation
android-transitions
【解决方案1】:
我会以不同的方式制作动画。我会用带有 wrap_content 的顶部单元格制作一个 LinearLayout,然后单击时我会执行以下操作:
valueAnimator = ValueAnimator.ofInt(titleContainer.getHeight(),titleContainer.getHeight() + newHeight );
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
titleContainer.setHeight(animation.getAnimatedValue());
}
});
valueAnimator.setDuration(270);
valueAnimator.start();
【解决方案2】:
我遇到了同样的问题。
TransitionManager.beginDelayedTransition() 函数采用的第一个参数必须是所有将在转换中交互的视图的父级,例如:
我有下一个布局:
<!-- The scene root -->
<LinearLayout
android:id="@+id/transition_container" >
<!-- First card -->
<androidx.cardview.widget.CardView
android:id="@+id/expandableCard1">
<LinearLayout
android:id="@+id/staticHeader1">
</LinearLayout>
<LinearLayout
android:id="@+id/expandableContent1">
</LinearLayout>
</androidx.cardview.widget.CardView>
<!-- Second card -->
<androidx.cardview.widget.CardView
android:id="@+id/expandableCard2">
<LinearLayout
android:id="@+id/staticHeader2">
</LinearLayout>
<LinearLayout
android:id="@+id/expandableContent2">
</LinearLayout>
</androidx.cardview.widget.CardView>
</LinearLayout>
还有我的代码(kotlin):
// toggle
if( expandableContent1.visibility == View.GONE ){
// apply to the root scene
TransitionManager.beginDelayedTransition(transition_container )
// change the visibility of the expandable content
expandableContent1.visibility = View.VISIBLE
arrowBtn.setImageResource( R.drawable.ic_arrow_up_24)
} else {
// apply to the root scene
TransitionManager.beginDelayedTransition(transition_container )
// change the visibility of the expandable content
expandableContent1.visibility = View.GONE
arrowBtn.setImageResource( R.drawable.ic_arrow_down_24)
}