某些设备上的 Animator/AnimatorSet 问题

Posted

技术标签:

【中文标题】某些设备上的 Animator/AnimatorSet 问题【英文标题】:Animator/AnimatorSet issue on some devices 【发布时间】:2018-04-01 09:33:59 【问题描述】:

我在某些设备上对 ObjectAnimator 类进行了一些测试,除了一个设备外,一切都很好:Huawei P8 Lite 2017。

在此设备上,视图在动画开始时“消失”并在结束时“出现”。 仅当我使用 AnimatorSet/Animator(Java 代码或 XML)时才会出现此问题,但使用旧动画类(TranslateAnimation、AlphaAnimation...)的动画效果很好。

以下是没有问题的设备列表: 连结 5 连结 5X 连结 9 宏达电一 M9 三星GS4 像素 XL 阿尔卡特 OneTouch 偶像 5

这个华为有什么问题?

编辑: 我做了一些其他的测试,问题似乎只是旋转动画。

ObjectAnimator r = ObjectAnimator.ofFloat(myView, View.ROTATION_Y, 540);
r.setDuration(5000);
r.start();

适用于除华为以外的所有设备。

如果我用 ALPHA 或 TRANSLATION_X 或 Y 替换 ROTATION_Y,它在华为上工作。

这是一个或多或少相同问题的链接: ObjectAnimator causes ImageView to disappear

【问题讨论】:

我不知道disappears / appears 的真正含义,但很可能动画师在developer options 下被禁用 好像 View.VISIBILITY = INVISIBLE。我已经检查了开发选项,动画比例为“1X” Animator 已启用 (1X)。 那部手机没有动画效果?甚至是家庭启动器应用程序中的那些? 仅在我的应用中。我测试了一个 ObjectAnimator.ofFloat(Rotation).setDuration(1 second),View 出现,1 秒不可见,并出现在动画结束时。这太疯狂了。 【参考方案1】:

我在使用华为设备 (P9 Lite) 时遇到了同样的问题。

问题是转换过程中的“相机距离”。华为相机距离默认值太小,需要通过代码设置:

image.setCameraDistance(float) 

来自文档:

如果您想指定一个导致视觉一致的距离 不同密度的结果,请使用以下公式:

float scale = context.getResources().getDisplayMetrics().density;
 view.setCameraDistance(distance * scale);

【讨论】:

以上是关于某些设备上的 Animator/AnimatorSet 问题的主要内容,如果未能解决你的问题,请参考以下文章

某些设备上的自定义 ViewPager 渲染问题

某些设备上的位置读数错误/精度差

某些三星设备上的编辑文本有限?

为啥使用相机意图捕获的图像会在 Android 上的某些设备上旋转?

iOS 9:按钮上的黑色背景,以及某些设备上的性能错误

UICollectionView 不适合某些 Apple 设备上的视图控制器