某些设备上的 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 问题的主要内容,如果未能解决你的问题,请参考以下文章