ObjectAnimator приводит к исчезновению ImageView

Я работаю над анимацией ImageView в Android (API 19), используя ObjectAnimator, У меня все работает хорошо, и он отлично отображается на Galaxy S3, но на моем Nexus 7 (модель WiFi 2013 года) это вызывает проблемы.

Цель состоит в том, чтобы сделать изображение на 360° вокруг своей оси Y, используя rotateY, Однако на Nexus 7, между 75° и 105°, изображение исчезает. Мой Drawable был создан из PNG, и соответствующий код ниже.

Посмотреть:

<ImageView
    android:id="@+id/login_logo"
    android:layout_width="match_parent"
    android:layout_height="120dp"
    android:layout_marginTop="30dp"
    android:src="@drawable/mimo_logo"/>

Запуск анимации:

ImageView image = (ImageView) findViewById(R.id.login_logo);
Animator anim = AnimatorInflater.loadAnimator(context, R.animator.flipping);
anim.setTarget(image);
anim.start();

И сама анимация:

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="3000"
    android:propertyName="rotationY"
    android:repeatCount="-1"
    android:valueFrom="0"
    android:valueTo="360" />

Я буду работать над получением GIF фактической проблемы, но есть ли у кого-нибудь мысли, почему у Nexus 7 будут проблемы?

РЕДАКТИРОВАТЬ: Вот как это выглядит (запись с использованием adb shell screenrecord):

http://f.cl.ly/items/1g1S2z3p3J2a33210M3s/rotateY.gif

1 ответ

Попробуйте использовать: image.setCameraDistance(float) метод.

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

Расстояние от камеры влияет на трехмерные преобразования, например, на вращение вокруг оси X и Y. Если свойства RotateX или RotationY изменены, и этот вид велик (больше чем половина размера экрана), рекомендуется всегда использовать расстояние камеры, которое больше чем высота (вращение оси X) или ширина (вращение оси Y) этого взгляда.

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

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