Animator/AnimatorSet проблема на некоторых устройствах

Я провел несколько тестов с классом ObjectAnimator на некоторых устройствах, и все в порядке, за исключением одного устройства: Huawei P8 Lite 2017.

На этом устройстве вид "исчезает" при запуске анимации и "появляется" в конце. Эта проблема возникает только тогда, когда я использую AnimatorSet/Animator (код Java или XML), но анимации, которые используют старый класс Animation (TranslateAnimation, AlphaAnimation...), работают хорошо.

Вот список устройств, где нет проблем: Nexus 5 Nexus 5X Nexus 9 HTC One M9 Samsung GS4 Pixel XL Alcatel OneTouch Idol 5

В чем проблема с этим Huawei?

Изменить: я сделал несколько других тестов, проблема, кажется, только с анимацией вращения.

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

работает на всех устройствах, кроме Huawei.

Если я заменю ROTATION_Y на ALPHA или TRANSLATION_X или Y, он будет работать на Huawei.

Вот ссылка с более или менее такой же проблемой: ObjectAnimator вызывает исчезновение ImageView

1 ответ

У меня была такая же проблема с устройствами Huawei (P9 Lite).

Проблема в "расстоянии камеры" во время трансформации. Значение по умолчанию для расстояния от камеры для Huawei слишком мало, и вы должны установить его с помощью кода:

image.setCameraDistance(float) 

Из документации:

Если вы хотите указать расстояние, которое приведет к визуально непротиворечивым результатам при различных плотностях, используйте следующую формулу:

float scale = context.getResources().getDisplayMetrics().density;
 view.setCameraDistance(distance * scale);
Другие вопросы по тегам