我尝试使用Transition + Transition管理器将此视图滑入和滑出,但是当点击隐藏按钮使视图GONE
时,它没有滑动动画。然而,显示按钮确实有滑动动画,使视图VISIBLE
再次。
@OnClick(R.id.testBtn)
public void onTestBtnClick(){
//hide
Transition transition = new Slide(Gravity.START);
transition.setDuration(600);
TransitionManager.beginDelayedTransition(mParentLayout, transition);
mLayout.setVisibility(View.GONE);
}
@OnClick(R.id.testBtn2)
public void onTestBtn2Click(){
//show
Transition transition = new Slide(Gravity.START);
transition.setDuration(600);
TransitionManager.beginDelayedTransition(mParentLayout, transition);
mLayout.setVisibility(View.VISIBLE);
}
我尝试过将testBtn2
的重力更改为Gravity.END
,但这会导致它从屏幕右侧开始一直滑动。
布局如下:
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/main_activity_root_view"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/testBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
android:text="Hide"
app:layout_constraintStart_toStartOf="parent"/>
<Button
android:id="@+id/testBtn2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toEndOf="@id/testBtn"
android:text="show"
/>
<LinearLayout
android:id="@+id/layout"
android:orientation="vertical"
android:layout_width="100dp"
android:layout_height="250dp"
android:background="@drawable/background_side_bar_corners"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
4条答案
按热度按时间xzabzqsa1#
不知道你的代码有什么问题。我已经创建了一个示例,只是尝试下面的代码工作正常。请务必添加
android:visibility="gone"
的面板视图布局,使其隐藏在第一次启动。x4shl7ld2#
创建这些动画
滑上
下滑
如果要将布局设置为可见
当您要设置布局时
在XML上设置
android:visibility="gone"
..希望这能解决你的问题。
sf6xfgos3#
优秀的答案here与这个问题非常相似。
我注意到约束布局需要非常具体地设置-如果您设置为“已完成”的视图被约束到它的兄弟视图,则这些约束似乎优先于任何过渡管理器动画,即,将一个视图设置为“已完成”会立即杀死它,而不是平滑地设置动画,因为其他视图的约束会立即生效。
我的解决方案是使用一个指南,并将两个视图约束到它,然后为过渡管理器设置GuidelineBegin。
iqxoj9l94#
Kotlin溶液
1.在任何需要的地方调用该方法。使用FALSE表示滑出,使用TRUE表示滑入。
1.targetView=要滑入/滑出的视图
1.rootLayout=targetView所在的主布局
1.在这个例子中,它将从右向左滑动。如果你想从左向右滑动,将Gravity.END改为Gravity.START