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

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

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

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

В чем проблема с этим хуавей?

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

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

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

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

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


person Tonio Marco    schedule 20.10.2017    source источник
comment
я понятия не имею, что на самом деле означают disappears / appears, но, скорее всего, аниматоры отключены под developer options   -  person pskink    schedule 20.10.2017
comment
Как будто View.VISIBILITY = INVISIBLE. Я проверил в настройках разработчика, масштаб анимации на 1X   -  person Tonio Marco    schedule 20.10.2017
comment
Аниматор включен (1X).   -  person Tonio Marco    schedule 20.10.2017
comment
то есть на этом телефоне анимация не работает? даже в домашнем приложении запуска?   -  person pskink    schedule 20.10.2017
comment
Только в моем приложении. Я протестировал ObjectAnimator.ofFloat(Rotation).setDuration(1 second), появляется View, становится невидимым на 1 секунду и появляется в конце анимации. Это безумие.   -  person Tonio Marco    schedule 20.10.2017
comment
так что ваш ObjectAnimator неверен, и никто не скажет вам, почему без вашего кода   -  person pskink    schedule 20.10.2017
comment
пробовал: myView.animate().setDuration(1000).rotationBy(360);?   -  person pskink    schedule 20.10.2017
comment
Тот же результат... :(   -  person Tonio Marco    schedule 23.10.2017
comment
так что понятия не имею... ;-(   -  person pskink    schedule 23.10.2017
comment
У вас такая же проблема с animate().rotationY на некоторых устройствах Huawei... вам удалось ее решить?   -  person wojciech_maciejewski    schedule 29.12.2017
comment
Привет. Может моя проблема как-то связана с вашей? У меня проблемы с исчезновением анимированного текста. stackoverflow.com/questions/55744220 /   -  person Alexey Usharovski    schedule 18.04.2019


Ответы (1)


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

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

image.setCameraDistance(float) 

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

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

float scale = context.getResources().getDisplayMetrics().density;
 view.setCameraDistance(distance * scale);
person FiveDragons    schedule 29.03.2018