Android 从顶部设置AppBarLayout动画
我正在尝试从顶部设置AppBarLayout的动画,就像视频中的工具栏一样 这是我的布局Android 从顶部设置AppBarLayout动画,android,android-coordinatorlayout,android-appbarlayout,Android,Android Coordinatorlayout,Android Appbarlayout,我正在尝试从顶部设置AppBarLayout的动画,就像视频中的工具栏一样 这是我的布局 <android.support.design.widget.CoordinatorLayout android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.AppBarLayout android:
<android.support.design.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:id="@+id/abl"
android:layout_width="match_parent"
android:layout_height="152dp">
<android.support.design.widget.CollapsingToolbarLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:contentScrim="?colorPrimary"
app:titleEnabled="true"
app:expandedTitleTextAppearance="@style/Title.Expanded"
app:collapsedTitleTextAppearance="@style/Title.collapsed"
app:title="Title"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_height="?attr/actionBarSize"
android:layout_width="match_parent"
app:layout_collapseMode="pin"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
</android.support.v7.widget.Toolbar>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
app:behavior_overlapTop="48dp"/>
</android.support.design.widget.CoordinatorLayout>
我计划将AppBarLayout转换为其高度的负数,然后将其设置为0
但是由于某种原因,abl.setTranslationY(-height)
不起作用:(
编辑:如果在布局所有视图后执行该命令(例如,如果在按钮的单击侦听器中执行,则该命令有效),但在onCreate
、onResume
或onCreateOptions
中不起作用
编辑2:我需要在活动开始时没有appBarLayout,然后从顶部进入。请参阅视频。使用以下方法:
private static final float APPBAR_ELEVATION = 14f;
private void AnimateAppBar(final AppBarLayout appBar) {
appBar.animate()
.translationY(-appBar.getHeight())
.setInterpolator(new LinearInterpolator())
.setDuration(500)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
appBar.setElevation(0);
appBar.animate()
.translationY(0)
.setInterpolator(new LinearInterpolator())
.setDuration(500)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
appBar.setElevation(APPBAR_ELEVATION);
}
});
}
});
}
这是调用AnimateAppBar(appBar);
您可以同时更改Duration
以加快动画速度,如果不想在动画结束时将效果设置为较高,则可以将APPBAR\u ELEVATION
设置为0
编辑:
在onCreate()中使用此选项
并添加此方法:
private void animationAppBarDown(final AppBarLayout appBar){
new CountDownTimer(300, 1) {
public void onTick(long millisUntilFinished) {
appBar.setTranslationY(-appBar.getHeight());
}
public void onFinish() {
appBar.animate()
.translationY(0)
.setDuration(500).start();
}
}.start();
}
结果是:
使用以下方法:
private static final float APPBAR_ELEVATION = 14f;
private void AnimateAppBar(final AppBarLayout appBar) {
appBar.animate()
.translationY(-appBar.getHeight())
.setInterpolator(new LinearInterpolator())
.setDuration(500)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
appBar.setElevation(0);
appBar.animate()
.translationY(0)
.setInterpolator(new LinearInterpolator())
.setDuration(500)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
appBar.setElevation(APPBAR_ELEVATION);
}
});
}
});
}
这是调用AnimateAppBar(appBar);
您可以同时更改Duration
以加快动画速度,如果不想在动画结束时将效果设置为较高,则可以将APPBAR\u ELEVATION
设置为0
编辑:
在onCreate()中使用此选项
并添加此方法:
private void animationAppBarDown(final AppBarLayout appBar){
new CountDownTimer(300, 1) {
public void onTick(long millisUntilFinished) {
appBar.setTranslationY(-appBar.getHeight());
}
public void onFinish() {
appBar.animate()
.translationY(0)
.setDuration(500).start();
}
}.start();
}
结果是:
我不只是想给工具栏设置动画,我想让整个appBarLayout从顶部进入。你应该有更好的代码风格。我只是说。是的,我知道@NikolaDespotoski,但这是我当时想到的第一个解决方案。@MicheleLacorte我不反对这个解决方案,但你编写的代码的风格。:)有无数种方法可以编写相同的20行代码,如果您不喜欢,我可以更改;)@NikolaDespotoski我不只是想给工具栏设置动画,我想让整个appBarLayout从顶部进入你应该有更好的代码风格。只是说说而已。是的,我知道@NikolaDespotoski,但这是我当时想到的第一个解决方案。@MicheleLacorte我不反对这个解决方案,但反对你编写的代码的样式。:)有无数种方法可以编写相同的20行代码,如果您不喜欢,我可以更改;)@尼古拉·德斯波托斯基