Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
水平android:animateLayoutChanges=";“真的”;动画不平滑_Android_Android Layout_Android Animation_Android Layout Weight_Android Layoutparams - Fatal编程技术网

水平android:animateLayoutChanges=";“真的”;动画不平滑

水平android:animateLayoutChanges=";“真的”;动画不平滑,android,android-layout,android-animation,android-layout-weight,android-layoutparams,Android,Android Layout,Android Animation,Android Layout Weight,Android Layoutparams,我有一个布局,动画如下 txt\u十亿是动态显示的,带有android:animateLayoutChanges=“true”(下面的布局代码) 请注意,100正在跳跃(实际上所有人都在跳跃,但是100更明显)。如何防止文本跳转 <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:animateLayoutChanges="tr

我有一个布局,动画如下

txt\u十亿
是动态显示的,带有
android:animateLayoutChanges=“true”
(下面的布局代码)

请注意,
100
正在跳跃(实际上所有人都在跳跃,但是
100
更明显)。如何防止文本跳转

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:animateLayoutChanges="true"
    android:orientation="horizontal">
    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:padding="8dp"
        android:background="#9f9"
        android:text="Hundreds" />
    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:padding="8dp"
        android:background="#f9f"
        android:text="Thousands" />
    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:padding="8dp"
        android:background="#0ff"
        android:text="Millions" />
    <TextView
        android:id="@+id/txt_billion"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:padding="8dp"
        android:visibility="gone"
        android:background="#ff0"
        android:text="Billions" />
</LinearLayout>


您可以从中获取代码以进行测试

尝试使用支持转换来代替
animateLayoutChanges

首先,从XML文件中删除android:animateLayoutChanges=“true”

之后,将
compile'com.android.support:transition:25.4.0'
添加到应用程序依赖项中

然后,在更改可见性之前添加此行(来自android.support.transition包的TransitionManager)

为您的代码

public void clickMe(View view) {
        TransitionManager.beginDelayedTransition((ViewGroup) billionText.getParent());
        if (billionText.getVisibility() == View.GONE) {
            billionText.setVisibility(View.VISIBLE);
        } else {
            billionText.setVisibility(View.GONE);
        }
    }

问题是
animateLayoutChanges
只影响
ViewGroup
的子类<代码>文本视图无法对布局更改动画做出反应,因此文本会跳转。有两种方法可以解决此问题:

1) 将每个
TextView
包装在
FrameLayout
中,并将重量放在
FrameLayout
上。您还必须向每个添加
android:animateLayoutChanges=“true”
,并在每个
FrameLayout
上调用
getLayoutTransition().enableTransitionType(LayoutTransition.CHANGING)
。这是一种总体布局方式,但它允许您继续使用过渡动画


2) 使用
值Animator
并设置(dis)显示项的权重动画。由于动画需要在每一帧上布置
线性布局
,因此动画可能会有点起伏,但它仍然可以通过。您还必须解决消失物品上的文本回流问题,可能需要先设置淡出的动画,然后设置重量变化的动画。

在哪个设备上?安卓版本?硬件加速是否启用?任何设备。我在Nexus5的Android模拟器上试过,NougatEmulator不是一个设备。先试试这个设备。它应该有很大的不同。它也发生在实际的设备上。所以我创建了一个小样本作品来证明这个问题。请尝试创建带有文字重心的水平布局,并更改为true。你应该看到这种情况发生。对不起,无法复制,在我的OnePlus OneNo上运行完全平稳,它无法解决问题。“数百人”仍然在跳跃。尝试横向模式,跳跃更明显。
public void clickMe(View view) {
        TransitionManager.beginDelayedTransition((ViewGroup) billionText.getParent());
        if (billionText.getVisibility() == View.GONE) {
            billionText.setVisibility(View.VISIBLE);
        } else {
            billionText.setVisibility(View.GONE);
        }
    }