перевести анимацию - PullRequest
       2

перевести анимацию

28 голосов
/ 18 ноября 2010

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

Часть кода, который я пробовал, была

<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator">

<translate android:fromXDelta="0%p" android:toXDelta="200%p" 
android:duration = "2000"/>
</set>

это перемещает изображение слева направо. Но это снова подходит к левой стороне. Может кто-нибудь сказать мне, как решить эту проблему?

Ответы [ 3 ]

77 голосов
/ 18 ноября 2010

Вы стали жертвой огромного недоразумения, которое все сначала создают в отношении анимации Android: анимированный ImageView (или любой другой вид) на самом деле не движется (или масштабирование, вращение или вымирание) , Это все хитрость ... анимация - это, по сути, несколько последних инструкций движку композиции экрана, чтобы сместить представление на x / y, повернуть на z и т. Д. Базовая позиция вида / размер / угол / альфа действительно никогда не меняется.

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

Тем не менее, вы можете достичь желаемого простым способом, добавив android:fillAfter="true" к своему тегу <translate>. Просто помните, что изображение на самом деле не было перемещено. Если вам нужно обновить макет в конце анимации, подключите AnimationListener и сделайте это в onAnimationEnd().

50 голосов
/ 18 ноября 2010

Я понял ... вместо того, чтобы использовать этот анимационный XML-файл, я написал в java-файле.

Animation animation = new TranslateAnimation(0, 500,0, 0);
animation.setDuration(1000);
animation.setFillAfter(true);
myImage.startAnimation(animation);
myImage.setVisibility(0);

Теперь изображение перемещается слева направо, а затем оно становится невидимым ... и, следовательно, анимированным !!! :)

17 голосов
/ 05 октября 2012

Перевести Анимация может изменить внешний вид объекта, но не может изменить сами объекты. То есть, если вы примените анимацию перевода к представлению, он переместится на новую позицию, но его события щелчка не будут запущены; события щелчка будут по-прежнему срабатывать в своей предыдущей позиции.

Это происходит потому, что вид все еще находится в исходном положении. Чтобы преодолеть это, мы можем использовать ObjectAnimation, которая фактически перемещает объект. Анимация объекта - единственная анимация, которая фактически перемещает объект.

Вы можете создать анимацию перевода с помощью ObjectAnimator.

ObjectAnimator transAnimation= ObjectAnimator.ofFloat(view, propertyName, fromX, toX);
transAnimation.setDuration(3000);//set duration
transAnimation.start();//start animation

view - это вид, к которому применяется анимация propertyName - свойство, являющееся анимированным. FromX, toX-Набор значений, между которыми анимация будет анимироваться с течением времени.

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