Android - Flip Animation не переворачивается плавно

Я хочу, чтобы мое изображение переворачивалось по горизонтали 4 раза и в то же время уменьшало его.

У меня есть следующий код для перелистывания:

ObjectAnimator flipAnimation = ObjectAnimator.ofFloat(view, "rotationY", 0.0f, 1440f);
flipAnimation.setDuration(4000);
flipAnimation.start();

И у меня есть следующий код в scale_down.xml для уменьшения масштаба:

<scale
        android:duration="4000"
        android:fromXScale="1"
        android:fromYScale="1"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="0.1"
        android:toYScale="0.1" >
    </scale>

Однако, когда я запускаю свое приложение на эмуляторе в eclipse, переворачивающееся изображение показывает неловкий эффект. Как вы можете видеть на изображениях, иногда при перелистывании одна вертикальная сторона длиннее другой, что создает эффект растяжения, чего я не хочу. Что-нибудь помогает устранить этот эффект?

введите здесь описание изображениявведите здесь описание изображения введите здесь описание изображения


person Derekyy    schedule 06.07.2014    source источник


Ответы (1)


Этот эффект называется искажением перспективы. И это именно то, для чего предназначен setCameraDistance():

Задает расстояние по оси Z (ортогонально плоскости X/Y, на которой рисуются виды) от камеры до этого вида. Расстояние до камеры влияет на 3D-преобразования, например на повороты вокруг осей X и Y. Если свойства вращениеX или вращениеY изменены, а это представление большое (более половины размера экрана), рекомендуется всегда использовать расстояние до камеры, превышающее высоту (поворот по оси X) или ширину (поворот по оси Y). ) этого взгляда.

Расстояние камеры от плоскости обзора может влиять на искажение перспективы вида при вращении вокруг оси x или y. Например, большое расстояние приведет к большому углу обзора, и не будет сильного искажения перспективы вида при его вращении. Небольшое расстояние может привести к гораздо большему искажению перспективы при вращении, а также может привести к некоторым артефактам рисования, если повернутый вид окажется частично позади камеры (поэтому рекомендуется использовать расстояние, по крайней мере, равное размеру изображения). вид, если вид должен быть повернут.)

Возможно, вам захочется поиграть со значением в зависимости от размеров представления и визуального эффекта, которого вы хотите достичь. Я получил хороший результат с:

view.setCameraDistance(10 * view.getWidth());
person matiash    schedule 06.07.2014
comment
ОТЛИЧНЫЙ! Это то, что я хочу. И спасибо за информацию. Установка числа = 10 уже вполне удовлетворительна. - person Derekyy; 06.07.2014