当用户滚动列表时,我正在尝试隐藏或显示工具栏。要做到这一点,我正在使用翻译,但会出现一个空格而不是我的actionBar。如果我使用setVisibility(View.GONE),则在动画期间会出现空白区域,并在完成时隐藏它是丑陋的..
Here is a short video of my issue
以下是我的动画制作方法(来自Google I / O应用程序):
public void showToolbar(boolean show){
if (show) {
toolbar.animate()
.translationY(0)
.alpha(1)
.setDuration(HEADER_HIDE_ANIM_DURATION)
.setInterpolator(new DecelerateInterpolator());
} else {
toolbar.animate()
.translationY(-toolbar.getBottom())
.alpha(0)
.setDuration(HEADER_HIDE_ANIM_DURATION)
.setInterpolator(new DecelerateInterpolator());
}
}
这是我的布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/mainContent">
<include layout="@layout/toolbar"
android:id="@+id/my_toolbar" />
<fragment
android:name="com.ar.oe.fragments.SectionsFragment"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="?attr/actionBarSize"/>
</RelativeLayout>
我的工具栏
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/my_toolbar"
android:layout_height="?attr/actionBarSize"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary"
/>
答案 0 :(得分:3)
您需要为容器设置动画,而不是工具栏。
试试这个:
RelativeLayout mainContent = (RelativeLayout) findById(R.id.mainContent);
public void showToolbar(boolean show){
if (show) {
mainContent.animate()
.translationY(0)
.alpha(1)
.setDuration(HEADER_HIDE_ANIM_DURATION)
.setInterpolator(new DecelerateInterpolator());
} else {
mainContent.animate()
.translationY(-toolbar.getBottom())
.alpha(0)
.setDuration(HEADER_HIDE_ANIM_DURATION)
.setInterpolator(new DecelerateInterpolator());
}
}
它对我有用;)
如果您想使用工具栏移动片段,则需要为片段设置动画,而不仅仅是栏。
答案 1 :(得分:1)
当用户尝试滚动时,最好为工具栏和下面的片段(一起)显示上滑翻译动画,这样只有工具栏离开视图并且片段到达顶部。 (比方说,200ms)。要做到这一点,将整个外部相对布局翻译为20%左右(您可以更改为只有工具栏离开视图):
在anim文件夹中添加slide_up.xml:
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fillAfter="false"
android:fromYDelta="0%"
android:toYDelta="-20%"
android:duration="200"/>
</set>
然后,当触发滚动事件时,请执行以下操作:
...
RelativeLayout rel = (RelativeLayout)findViewById(R.id.mainContent);
Animation slideUp = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.slide_up);
rel.startAnimation(slideUp);
...
希望这会有所帮助......