水平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);
}
}