Борьба с анимацией просмотра - PullRequest
2 голосов
/ 22 февраля 2011

У меня есть абсолютное расположение. В этом макете есть пользовательский вид, который занимает левую треть экрана. Я вставил в макет кнопку, которую я хочу, чтобы пользовательский вид скользил по экрану. Я попытался использовать ресурсы анимации (переводит ... "slidein" и "slideout") и функцию startAnimation в пользовательском представлении, но не могу получить искомое поведение.

ОК ... Я начинаю с видимого пользовательского представления и в onCreate нахожу представление и анимирую его за пределы экрана, используя мою анимацию слайда. Это отлично работает. Я понял, что мне нужно установить «fillAfter» в анимации, чтобы пользовательский вид оставался вне экрана.

Теперь, когда я нажимаю кнопку, я хочу, чтобы пользовательский вид снова сдвинулся на экран, поэтому я снова запускаю анимацию слайдов, используя startAnimation, но с помощью слайдинга. НО ... это заставляет вид сначала вернуться в исходное положение И затем скользить вправо ..., заставляя его заканчивать в середине экрана.

Как заставить анимацию использовать текущую позицию представления в качестве начальной позиции анимации, а не ее исходную позицию?

Спасибо

Ответы [ 2 ]

2 голосов
/ 24 февраля 2012

Я также испытал мерцание, описанное в этом вопросе. Мое решение состояло в том, чтобы использовать улучшенные API анимации Сота. Есть удобная библиотека, которая переносит их обратно на Android 1.0:

http://nineoldandroids.com/

Подробнее об API-интерфейсе Honeycomb Animation см .: http://android -developers.blogspot.com / 2011/02 / анимация-в-honeycomb.html

В моем случае у меня было 2 перекрывающихся LinearLayouts внутри RelativeLayout. Я хотел сдвинуть верхнюю LinearLayout с экрана и показать нижнюю LinearLayout ниже. Затем я захотел переместить LinearLayout обратно на экран в исходное положение, чтобы верхний макет снова покрыл нижний макет. Используя старые API анимации, я видел мерцание перед запуском второй анимации (offscreen -> onscreen).

С новыми API-интерфейсами эта задача оказалась тривиальной:

// Slide out (add to button handler)
ObjectAnimator.ofFloat(mTopLayout, "translationY", mTopLayout.getHeight()).start();

// Slide back in  (add to button handler)
ObjectAnimator.ofFloat(mTopLayout, "translationY", 0).start();

API-интерфейсы Honeycomb Animation фактически перемещают объекты по экрану (вместо того, чтобы притворяться, что перемещают их, как старые API-интерфейсы анимации), поэтому нет необходимости дурачиться с filleAfter, fillBefore и т. Д.

1 голос
/ 22 февраля 2011

Посмотрите, как установить свойство fillAfter, чтобы сохранить конечное состояние анимации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...