2013-12-01 2 views
0

У меня есть сенсорное событие, где я изменить вид позицию (фото перетащить п падение)Android анимации преобразования изменяет расположение по умолчанию

case MotionEvent.ACTION_MOVE: 
     view.setTranslationX(X - xDelta); 

В случае выпуска анимировать View обратно в исходное положение (0)

slideBack = new TranslateAnimation(Animation.ABSOLUTE,0,Animation.ABSOLUTE,view.getTranslationX()*-1,Animation.ABSOLUTE,0,Animation.ABSOLUTE,0); 
slideBack.setFillAfter(true); 
slideBack.setDuration(1000); 

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

Как установить, чтобы текущее значение было сброшено и использовано как новая точка (0)? Или как сделать анимацию, которая не испортит значения перевода?

Спасибо за ваше время.

ответ

1

TranslateAnimation - это анимация вида, в отличие от анимации свойств. Различие определяется в этих Документах, и включен фрагмент кода:

http://developer.android.com/guide/topics/graphics/overview.html http://developer.android.com/guide/topics/graphics/prop-animation.html

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

В принципе, просмотр анимационных работ осуществляется путем применения матрицы преобразования к DisplayList в draw(). Это влияет на визуализацию представления, но полностью отличается от любого свойства View.

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

ObjectAnimator anim = ObjectAnimator.ofFloat(view, "translationX", view.getTranslationX(), 0f); 
anim.setDuration(1000); 
anim.start(); 

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

+0

Спасибо! Это прояснилось и объяснило многое! – somerandomusername

Смежные вопросы