TextViews 在 Android 4 上仅动画一次
Posted
技术标签:
【中文标题】TextViews 在 Android 4 上仅动画一次【英文标题】:TextViews animate only once on Android 4 【发布时间】:2013-01-06 10:40:45 【问题描述】:我有一个带有多个按钮和两个文本视图的布局 (RelativeLayout)。对于信息的每次更改,我都会淡出所有视图,更新信息,然后淡入视图。我为此使用布局动画。
非常奇怪的是文本视图只能动画一次。它们一次正确地淡入和淡出,然后就不再动画了。另一方面,按钮的动画效果很好。
另一个可能奇怪的事情是我在 android 2.3.x 上没有遇到这个问题,但在 android 4.0.x 上。
我可以通过在淡入后清除文本视图上的动画来解决此问题,但它看起来不太好,因为它们仍然没有淡入。
我曾尝试在淡入之前清除文本视图上的动画,但没有帮助。我还尝试了清单中 targetSdkVersion 属性的不同设置,但没有任何结果。
动画的淡入(淡出类似):
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="750"
android:fillAfter="true"
android:fromAlpha="0.0"
android:interpolator="@android:anim/accelerate_interpolator"
android:toAlpha="1.0"
/>
动画代码(每次布局淡入时都会运行):
// Set listener.
viewGroup.setLayoutAnimationListener(listener);
// Load animation.
final Animation fadeIn = AnimationUtils.loadAnimation(context, R.anim.fade_in);
// Create and start animation controller.
final LayoutAnimationController animController = new LayoutAnimationController(fadeIn);
viewGroup.setLayoutAnimation(animController);
animController.setAnimation(fadeIn);
animController.setDelay(FADE_IN_DELAY + extraDelay);
animController.setOrder(LayoutAnimationController.ORDER_REVERSE);
animController.start();
有人知道吗? Buttons 和 TextViews 之间是否存在某种特定于动画的区别? Android 4 中是否有任何动画更改破坏了向后兼容性?
谢谢!
【问题讨论】:
我的淡入动画在 4.2.1 中再次正常工作。我不会再花时间尝试在 4.0.x 上解决此问题,因为我找到了解决方法。 【参考方案1】:布局动画仅在视图组布置其子级时发生 - 根据[LayoutAnimationController][1]
文档,为每个子级播放相同的动画,但开始时间不同 - 它通常用于例如ListView
或 GridView
为项目的入口设置动画。
动画通常不会在您更新内容时播放。您需要使用 View.startAnimation(Animation)
和 View.clearAnimation()
来确保每次更新内容时都会播放动画。
【讨论】:
是的,我同意。我动画的布局是我上面代码sn-p中的viewGroup,布局动画从最后一行开始:animController.start(); 我可以补充一点,我没有在布局xml中附加布局动画。正如 sn-p 所描述的,它在 java 代码中处理。以上是关于TextViews 在 Android 4 上仅动画一次的主要内容,如果未能解决你的问题,请参考以下文章
Android:是不是可以在 TextViews 9patch 背景之外设置 drawableLeft?
让Android主屏幕小部件在textviews之间交替的最佳方式是啥?
Display.getSupportedModes() 在 4K Android TV 上仅返回 1080p 显示模式
是否可以使用 android:DrawableRight 在 Buttons 和 TextViews 中使用 VectorDrawable?