动画AppBarLayout中的视图

时间:2016-09-19 16:55:05

标签: android android-layout android-animation android-coordinatorlayout android-appbarlayout

我在coordinatorLayout中有一个AppBarLayout,如下所示:

<coordinatorLayout>
<android.support.design.widget.AppBarLayout
    android:id="@+id/appbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.design.widget.TabLayout
        android:id="@+id/scrollable_category_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_scrollFlags="scroll|enterAlways|snap"
        app:tabGravity="center"
        app:tabMode="scrollable" />

    <RelativeLayout
        android:id="@+id/parent_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="100dp"
        android:background="@android:color/white"
        android:visibility="visible">

        <few more layout/>
    </RelativeLayout>
</android.support.design.widget.AppBarLayout>

<more views>
</coordinatorLayout>

我希望默认情况下隐藏relativeLayout,如果API给出特定的响应,那么我将显示RelativeLayout及其内容。根据API响应,内容可以具有不同的高度(例如,文本可以是单行或多行等)。所以我不知道开始时视图的高度。现在我想将一个translationY应用于视图,使其看起来像是来自tabLayout(显示阴影等)。

我尝试了很多解决方案,其中之一是:

adParentLayout.animate()
.translationY(0)
.setDuration(5000)
.withEndAction(new Runnable() {
        @Override
        public void run() {
            Toast.makeText(MainActivity.this, "Animation Complete", Toast.LENGTH_SHORT).show();
        }
    })
.withStartAction(new Runnable() {
        @Override
        public void run() {
            adParentLayout.setVisibility(View.VISIBLE);
            adParentLayout.setTranslationY(-adParentLayout.getHeight());
        }
    });

这显然不起作用。我对动画知之甚少,并希望得到建议。

我尝试过的一个解决方案是在布局中显示视图,然后应用翻译。但是这使得视图在TabLayout之上翻译完全覆盖它。事实证明,AppBarLayout扩展了LinearLayout,因此第二个Layout RelativeLayout在其上方进行了翻译。我不明白如何实现这种效果,任何正确方向的输入都会有所帮助。

1 个答案:

答案 0 :(得分:1)

我使用LayoutTransition。基本上我刚刚在appBarLayout中添加了android:animateLayoutchanges = true,它处理了动画视图可见性的动画。

我不知道这件事。看起来很棒。