Вопрос по android, layout – Android-анимированный вид, появляющийся на экране, который выталкивает текущий полноэкранный вид наружу

2

Мне это нужно для проекта предварительно API11.

Я ищу способ добавить вид справа, который приведет к смещению текущего полноэкранного вида влево, чтобы новый вид был виден на экране.

новый вид составляет около 1/3 ширины экрана, так что это расстояние, на которое текущий экранный вид Fusll должен выходить за пределы экрана.

Я устал от различных решений с TranslateAnimation (), хотя я доволен анимацией, у меня есть проблемы со всеми интерактивными областями в исходном виде, которые находятся не там, где они должны быть.

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

что было бы самым простым решением, которое имеет хорошую анимацию, когда новый вид входит или выходит из него, и который помещает вид в правильное место с точки зрения макета.

Ваш Ответ

2   ответа
11

Аниматор API, Все представления теперь имеют свойства с соответствующими установщиками и получателями. Чтобы переместить вид влево из области видимости, найдите ширину экрана и выполните:

View viewToShiftOut = getOutView();
ObjectAnimator outAnim = ObjectAnimator.ofFloat(viewToShiftOut, "x", 0, -widthOfScreen);
outAnim.setDuration(1000);
outAnim.start();

Это сместит вид и его содержимое полностью за пределы экрана в течение 1 секунды (1000 миллисекунд). Чтобы сдвинуть его с места, сделайте это:

View viewToShiftIn = getInView();
ObjectAnimator inAnim = ObjectAnimator.ofFloat(viewToShiftIn, "x", widthOfScreen, 0);
inAnim.setDuration(1000);
inAnim.start();

Все свойства, кликабельные области и т. Д. Будут следовать виду, так что вы закончите, когда закончится анимация. Вы можете анимировать их вместе так:

View viewToShiftOut = getOutView();
View viewToShiftIn = getInView();
ObjectAnimator outAnim = ObjectAnimator.ofFloat(viewToShiftOut, "x", 0, -widthOfScreen);
ObjectAnimator inAnim = ObjectAnimator.ofFloat(viewToShiftOut, "x", widthOfScreen, 0);
outAnim.setDuration(1000);
inAnim.setDuration(1000);
outAnim.start();
inAnim.start();

Сообщение блога

РЕДАКТИРОВАТЬ: я заметил, что вы хотели только сместить представление на 1/3, чтобы вы могли получить количество пикселей для смещения каждого наwidthOfScreen/3.

РЕДАКТИРОВАТЬ 2: Еще одним преимуществом является то, что вы можете использовать его с аппаратным ускорением без проблем, которые есть у большинства планшетов 3.0+.

Error: User Rate Limit Exceeded totem
Error: User Rate Limit Exceededscreensize - viewWidthError: User Rate Limit Exceeded0Error: User Rate Limit ExceededrequestLayout()Error: User Rate Limit ExceededshouldError: User Rate Limit Exceeded
0

как вы, вероятно, делаете, вам необходимо программно изменить макет в onAnimationEnd объекта AnimationListener, чтобы он соответствовал желаемому конечному позиционированию.

Чтобы убрать мерцание, вызовите clearAnimation () в представлении, которое вы анимируете, также в onAnimationEnd.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded totem

Похожие вопросы