【问题标题】:LinearLayout animation not showing data from within the layout after second usageLinearLayout 动画在第二次使用后不显示布局内的数据
【发布时间】:2017-10-16 16:38:58
【问题描述】:

我正在为 LinearLayout 使用动画,但是在我第二次显示布局内的数据后,它的内容没有显示出来。

我的 XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <android.support.v7.widget.CardView
            android:id="@+id/invoiceCardView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_margin="5dp">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"
                android:paddingBottom="5dp">

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal">

                    <LinearLayout
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_weight="0.1"
                        android:gravity="center_vertical"
                        android:orientation="vertical">

                        <com.rey.material.widget.CheckBox
                            android:id="@+id/selectInvoice"
                            style="@style/Material.Drawable.CheckBox"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content" />
                    </LinearLayout>

                    <LinearLayout
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight="0.33"
                        android:orientation="vertical">

                        <LinearLayout
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:orientation="horizontal">

                            <TextView
                                android:id="@+id/invoiceId"
                                android:layout_width="match_parent"
                                android:layout_height="wrap_content"
                                android:layout_weight="1"
                                android:text="#00000003"
                                android:textColor="#5d9cec"
                                android:textSize="18sp" />
                        </LinearLayout>

                        <LinearLayout
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:orientation="horizontal">

                            <TextView
                                android:id="@+id/invoiceStatus"
                                android:layout_width="match_parent"
                                android:layout_height="wrap_content"
                                android:layout_weight="0.37"
                                android:background="#26C6DA"
                                android:gravity="center"
                                android:text="active"
                                android:textColor="@android:color/white"
                                android:textStyle="bold" />

                        </LinearLayout>

                    </LinearLayout>

                    <LinearLayout
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:layout_weight="0.25"
                        android:gravity="center_vertical"
                        android:orientation="vertical">

                        <TextView
                            android:id="@+id/invoiceAmount"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:gravity="center"
                            android:text="$ 222,064.00"
                            android:textSize="16sp"
                            android:textStyle="bold" />
                    </LinearLayout>

                    <LinearLayout
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_gravity="center"
                        android:layout_weight="0.1"
                        android:gravity="center_vertical"
                        android:orientation="vertical">

                        <com.mikepenz.iconics.view.IconicsImageView
                            android:id="@+id/showDetailsArrow"
                            android:layout_width="20dp"
                            android:layout_height="20dp"
                            android:layout_gravity="center"
                            app:iiv_color="@color/colorGrey"
                            app:iiv_icon="faw-angle-down" />
                    </LinearLayout>
                </LinearLayout>

                <LinearLayout
                    android:id="@+id/invoiceDetails"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal"
                    android:visibility="gone">

                    <TableLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="10dp"
                        android:layout_marginRight="10dp">

                        <TableRow
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_marginTop="5dp"
                            android:background="@color/appBlack">

                            <TextView
                                android:id="@+id/textView12"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:text="Details"
                                android:textColor="@android:color/white"
                                android:textSize="16sp"
                                android:textStyle="bold" />
                        </TableRow>

                        <TableRow
                            android:layout_width="match_parent"
                            android:layout_height="match_parent">

                            <TextView
                                android:layout_width="0dp"
                                android:layout_height="wrap_content"
                                android:layout_weight="1"
                                android:gravity="left"
                                android:paddingBottom="5dp"
                                android:paddingTop="5dp"
                                android:text="Date Sent"
                                android:textColor="@color/colorGrey" />

                            <TextView
                                android:id="@+id/dateSent"
                                android:layout_width="0dp"
                                android:layout_height="wrap_content"
                                android:layout_weight="1"
                                android:gravity="right"
                                android:text="7/27/2017"
                                android:textStyle="bold" />

                        </TableRow>

                        <TableRow
                            android:layout_width="match_parent"
                            android:layout_height="match_parent">

                            <TextView
                                android:id="@+id/textView18"
                                android:layout_width="0dp"
                                android:layout_height="wrap_content"
                                android:layout_weight="1"
                                android:gravity="left"
                                android:paddingBottom="5dp"
                                android:paddingTop="5dp"
                                android:text="Date Paid"
                                android:textColor="@color/colorGrey" />

                            <TextView
                                android:id="@+id/datePaid"
                                android:layout_width="0dp"
                                android:layout_height="wrap_content"
                                android:layout_weight="1"
                                android:gravity="right"
                                android:text="7/27/2017"
                                android:textStyle="bold" />
                        </TableRow>

                        <TableRow
                            android:layout_width="match_parent"
                            android:layout_height="match_parent">

                            <TextView
                                android:id="@+id/textView21"
                                android:layout_width="0dp"
                                android:layout_height="wrap_content"
                                android:layout_weight="1"
                                android:gravity="left"
                                android:paddingBottom="5dp"
                                android:paddingTop="5dp"
                                android:text="Days Past Due"
                                android:textColor="@color/colorGrey" />

                            <LinearLayout
                                android:layout_width="0dp"
                                android:layout_height="match_parent"
                                android:layout_weight="1"
                                android:gravity="right|center_vertical"
                                android:orientation="vertical">

                                <TextView
                                    android:id="@+id/daysPastDue"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:background="#f00000"
                                    android:paddingLeft="10dp"
                                    android:paddingRight="10dp"
                                    android:text="70 days"
                                    android:textColor="@android:color/white"
                                    android:textStyle="bold" />
                            </LinearLayout>

                        </TableRow>

                        <TableRow
                            android:layout_width="match_parent"
                            android:layout_height="match_parent">

                            <TextView
                                android:layout_width="0dp"
                                android:layout_height="wrap_content"
                                android:layout_weight="1"
                                android:gravity="left"
                                android:paddingBottom="5dp"
                                android:paddingTop="5dp"
                                android:text="@string/name"
                                android:textColor="@color/colorGrey" />

                            <TextView
                                android:id="@+id/name"
                                android:layout_width="0dp"
                                android:layout_height="wrap_content"
                                android:layout_weight="1"
                                android:gravity="right"
                                android:text="Test"
                                android:textStyle="bold" />
                        </TableRow>

                        <TableRow
                            android:layout_width="match_parent"
                            android:layout_height="match_parent">

                            <TextView
                                android:layout_width="0dp"
                                android:layout_height="wrap_content"
                                android:layout_weight="1"
                                android:gravity="left"
                                android:paddingBottom="5dp"
                                android:paddingTop="5dp"
                                android:text="Email"
                                android:textColor="@color/colorGrey" />

                            <HorizontalScrollView
                                android:layout_width="0dp"
                                android:layout_height="wrap_content"
                                android:layout_gravity="center_vertical|center_horizontal"
                                android:layout_weight="1"
                                android:fillViewport="true">

                                <LinearLayout
                                    android:layout_width="wrap_content"
                                    android:layout_height="match_parent"
                                    android:orientation="horizontal">

                                    <TextView
                                        android:id="@+id/email"
                                        android:layout_width="0dp"
                                        android:layout_height="wrap_content"
                                        android:layout_weight="1"
                                        android:gravity="right"
                                        android:text="test@email.com"
                                        android:textStyle="bold" />
                                </LinearLayout>
                            </HorizontalScrollView>
                        </TableRow>

                        <TableRow
                            android:layout_width="match_parent"
                            android:layout_height="match_parent">

                            <TextView
                                android:layout_width="0dp"
                                android:layout_height="wrap_content"
                                android:layout_weight="1"
                                android:gravity="left"
                                android:paddingBottom="5dp"
                                android:paddingTop="5dp"
                                android:text="Balance"
                                android:textColor="@color/colorGrey" />

                            <TextView
                                android:id="@+id/balance"
                                android:layout_width="0dp"
                                android:layout_height="wrap_content"
                                android:layout_weight="1"
                                android:gravity="right"
                                android:text="$ 420.00"
                                android:textStyle="bold" />
                        </TableRow>

                        <TableRow
                            android:layout_width="match_parent"
                            android:layout_height="match_parent">

                            <TextView
                                android:layout_width="0dp"
                                android:layout_height="wrap_content"
                                android:layout_weight="1"
                                android:gravity="left"
                                android:paddingBottom="5dp"
                                android:paddingTop="5dp"
                                android:text="Preview"
                                android:textColor="@color/colorGrey" />

                            <TextView
                                android:id="@+id/balance"
                                android:layout_width="0dp"
                                android:layout_height="wrap_content"
                                android:layout_weight="1"
                                android:gravity="right"
                                android:text="View"
                                android:textColor="#5d9cec" />
                        </TableRow>

                        <TableRow
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_marginTop="5dp"
                            android:gravity="center_vertical">

                            <TextView
                                android:layout_width="0dp"
                                android:layout_height="wrap_content"
                                android:layout_weight="0.5"
                                android:gravity="left"
                                android:paddingBottom="5dp"
                                android:paddingTop="5dp"
                                android:text="Actions"
                                android:textColor="@color/colorGrey" />

                            <fr.ganfra.materialspinner.MaterialSpinner
                                android:id="@+id/actions"
                                android:layout_width="0dp"
                                android:layout_height="wrap_content"
                                android:layout_weight="1"
                                android:textColor="@color/colorGrey"
                                android:textStyle="bold"
                                app:ms_arrowColor="@color/colorGrey"
                                app:ms_enableFloatingLabel="false"
                                app:ms_hint="Select Action"
                                app:ms_hintColor="@color/colorGrey"
                                app:ms_hintTextSize="14sp" />

                        </TableRow>

                    </TableLayout>
                </LinearLayout>

            </LinearLayout>

        </android.support.v7.widget.CardView>

    </LinearLayout>

</LinearLayout>

Java:

//variable declaration    
private boolean showRowDetails = false;
showRowDetails = !showRowDetails;
final LinearLayout invoiceDetails = (LinearLayout) view.findViewById(R.id.invoiceDetails);
invoiceDetails.setAlpha(0.0f);
IconicsImageView showDetailsArrow = (IconicsImageView) view.findViewById(R.id.showDetailsArrow);
if(showRowDetails){
    invoiceDetails.animate()
            .translationY(invoiceDetails.getHeight())
            .alpha(1.0f)
            .setDuration(800)
            .setListener(new AnimatorListenerAdapter() {
                @Override
                public void onAnimationEnd(Animator animation) {
                    super.onAnimationEnd(animation);
                    invoiceDetails.setVisibility(View.VISIBLE);
                }
            });
    showDetailsArrow.setImageDrawable(
            new IconicsDrawable(context)
                    .icon("faw-angle-up")
                    .color(ContextCompat.getColor(context, R.color.colorGrey))
    );
}
else {
    invoiceDetails.animate()
            .translationY(0)
            .alpha(0.0f)
            .setDuration(800)
            .setListener(new AnimatorListenerAdapter() {
                @Override
                public void onAnimationEnd(Animator animation) {
                    super.onAnimationEnd(animation);
                    invoiceDetails.setVisibility(View.GONE);
                }
            });
    showDetailsArrow.setImageDrawable(
            new IconicsDrawable(context)
                    .icon("faw-angle-down")
                    .color(ContextCompat.getColor(context, R.color.colorGrey))
    );
}

隐藏数据:

第一次显示的数据:

折叠视图后第二次显示的数据:

知道为什么会这样吗?谢谢大家的时间!

【问题讨论】:

    标签: android android-layout android-animation


    【解决方案1】:

    我之前遇到过类似的问题,即动画无法正确“填充”View 上动画的前后状态。我不确定这是否会完全解决您的问题,但请尝试实施类似的解决方案:

    这个想法是你应该在启动动画之前设置View的前置状态,然后在onAnimationEnd(Animator)中设置对象上动画的后置状态。例如,在你的表演动画中(当showRowDetailstrue),试试这个:

    invoiceDetails.setAlpha(0.0f);
    invoiceDetails.setTranslationY(0);
    invoiceDetails.setVisibility(View.VISIBLE);
    final int height = invoiceDetails.getHeight();
    invoiceDetails.animate()
        .translationY(height)
        .alpha(1.0f)
        .setDuration(800)
        .setListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                invoiceDetails.setAlpha(1.0f);
                invoiceDetails.setTranslationY(height);
            }
        }).start();
    

    请注意以下几点:

    1. 在开始动画之前移动 setVisibility(View.VISIBLE),因为您希望 View 已经可见,这样您就可以看到实际发生的动画。
    2. 在开始动画之前设置View的预状态。
    3. onAnimationEnd() 中设置View 的后置状态。
    4. 删除super.onAnimationEnd(animator),这不是必需的。

    我希望这个解释是有道理的。我的确切解决方案可能不会立即奏效,但想法应该是一样的。您需要四处玩耍,看看这是否适合您。希望这会有所帮助!

    【讨论】:

    • 最后你忘了打start()
    • @Brian 这很奇怪,即使我现在在第二次点击时进行了这些更改,我可以看到内容从线性布局中滑出并消失
    • 啊我以前也看到过类似的问题,不明白为什么Android动画有时如此令人头疼!您是否也对隐藏动画实施了状态前和更改后的更改?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 2018-11-08
    相关资源
    最近更新 更多