Android анимация - PullRequest
       1

Android анимация

0 голосов
/ 20 июля 2011

Мне нужно указать две анимации для класса, который расширяет LinearLayout: одна из них - анимация перевода (только ось X), вторая - тоже трансляция, но с использованием оси Y. Проблема в том, что первый должен запускаться при нажатии кнопки A, второй должен запускаться при нажатии кнопки B. Вот что я пробовал:

TranslateAnimation mMoveRight = new TranslateAnimation(Animation.RELATIVE_TO_SELF,     300, Animation.RELATIVE_TO_SELF,Animation.RELATIVE_TO_SELF);    
TranslateAnimation mMoveDown = new TranslateAnimation(Animation.RELATIVE_TO_SELF,Animation.RELATIVE_TO_SELF,Animation.RELATIVE_TO_SELF, 50);

mMoveRight.setDuration(6000);
mMoveDown.setDuration(1000);

AnimationSet mAnimationsSet = new AnimationSet(true);

mAnimationsSet.addAnimation(mMoveRight);
mAnimationsSet.addAnimation(mMoveDown);
mAnimationsSet.setFillEnabled(true);
mAnimationsSet.setFillAfter(true);

this.setAnimation(mAnimationsSet);
  1. Это мой класс, который расширяет LinearLayout.
  2. Анимации начинаются, когда рисуется вид - я не хочу.
  3. Я хочу запустить анимацию moveRight самостоятельно, ту же анимацию moveDown (но в другое время, чем moveRight).

Буду признателен за любую помощь.

Ответы [ 2 ]

0 голосов
/ 02 апреля 2015

AnimationSet объединяет анимации и запускает их параллельно.Вы должны создать 2 метода в своем пользовательском представлении, например:

public void moveRight() {
    TranslateAnimation mMoveRight = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 300, Animation.RELATIVE_TO_SELF, Animation.RELATIVE_TO_SELF);   
    mMoveRight.setDuration(6000);
    mMoveRight.setFillEnabled(true);
    mMoveRight.setFillAfter(true);
    this.startAnimation(mMoveRight);
}

...

public void moveDown() {
    TranslateAnimation mMoveDown = new TranslateAnimation(Animation.RELATIVE_TO_SELF, Animation.RELATIVE_TO_SELF, Animation.RELATIVE_TO_SELF, 50);
    mMoveDown.setDuration(6000);
    mMoveDown.setFillEnabled(true);
    mMoveDown.setFillAfter(true);
    this.startAnimation(mMoveDown);
}

Имея это, вы сможете запускать анимацию (анимация вниз и вправо отдельно) при нажатии кнопки.

CustomLinearLayout testLayout = ...; // initialize your layout

buttonA.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
      testLayout.moveRight();
    }
});

buttonA.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
      testLayout.moveDown();
    }
});

PS: я не проверял ваши анимации перевода, если они работают должным образом, просто предоставил вам идею.

0 голосов
/ 09 сентября 2011

Это просто. Создайте два XML-файла в папке res / anim, один XML-файл будет транслироваться по оси X, а другой XML-файл будет транслироваться по оси Y. Теперь установите в onClickListener () для кнопки A вызов первого файла XML, а для второго onClickListener () для кнопки B вызов второго файла XML. Хотя этот процесс немного длинен. Я думаю, что это способ достичь этого.

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