2015-01-01 3 views
1

Я новичок в этом форуме, но я прочел ее в течение длительного времени.Переместить кнопку в другую позицию кнопки

Я создаю приложение для Android, карточную игру, и я пытаюсь создать анимацию, чтобы сделать ее воспроизводимой. Мой вопрос: возможно ли построить TranslateAnimation из кода, используя положение кнопки, которую я хочу оживить, на позицию другой существующей кнопки или View?

Я пробовал такие вещи, как .getLocationInWindow(), но значения не те, что я ищу.

Заранее благодарим за каждый ответ.

+0

Вы заглянули в [Перетаскивание] (http://developer.android.com/guide/topics/ui/drag-drop.html)? – Emmanuel

+0

Вы хотите попробовать использовать getX() и getY() в документации по перетаскиванию? – sangra4l

+1

Извините, я неверно сформулировал ваш вопрос. – Emmanuel

ответ

2

Вам нужно запомнить несколько вещей. Если вы хотите использовать анимирование перевода, вам необходимо указать разницу вдоль обеих осей (x и y). Так что ваш код может выглядеть примерно так:

View viewToBeMoved = findViewById(R.id.view_to_be_moved); 
View destinationView = findViewById(R.id.destination_view); 
int xDiff = destinationView.getLeft() - viewToBeMoved.getLeft(); 
int yDiff = destinationView.getTop() - viewToBeMoved.getTop(); 
viewToBeMoved.animate().translationXBy(xDiff).translationYBy(yDiff); 

Кроме того, необходимо помнить, что этот код будет работать только когда оба viewToBeMoved и destinationView имеют один и тот же родитель (так getTop() и getLeft() методы возвращают правильные значения).

Edit:

Для представлений, которые DonT принадлежат к одному из родителей, вы можете попробовать что-то вроде этого:

View viewToBeMoved = findViewById(R.id.view_to_be_moved); 
int[] viewToBeMovedPos = new int[2]; 
viewToBeMoved.getLocationOnScreen(viewToBeMovedPos); 

View destinationView = findViewById(R.id.destination_view); 
int[] destinationViewPos = new int[2]; 
destinationView.getLocationOnScreen(destinationViewPos); 

int xDiff = destinationViewPos[0] - viewToBeMovedPos[0]; 
int yDiff = destinationViewPos[1] - viewToBeMovedPos[1]; 
viewToBeMoved.animate().translationXBy(xDiff).translationYBy(yDiff); 

вместо getLocationOnScreen вы можете использовать getLocationInWindow, но в обоих случаях могут быть уверены, что вы "invoke it AFTER layout has happened"

+0

спасибо за ответ ... Так что невозможно сделать анимационную работу между разными видами? К сожалению, я поместил кнопку «колоды» в «относительный макет колоды» и «карты игрока» в «реальном макете рук игрока». Нельзя ли ссылаться на их общего предка или работать с Абсолютным позиционированием (я попытался сделать это сам, но, к сожалению, без успеха) – sangra4l

+0

взгляните на мое редактирование –

+0

это сработало ... я думаю, что я люблю тебя сейчас, это стыдно, что мы не могли провести отпуск вместе ... Шутки в сторону спасибо вам. – sangra4l