Не удалось использовать кнопки после использования TranslateAnimation? - PullRequest
1 голос
/ 02 декабря 2011

Я работал над следующим кодом

    Animation animation1= new TranslateAnimation(0,0,0,-250);
    animation1.setDuration(1000);
  animation1.setFillAfter(true);
     rom.startAnimation(animation1);

Перевод работает нормально, но я не смог использовать clicklistener после этого перевода. Возможно ли это использовать? Пожалуйста, кто-нибудь, помогите мне?

1 Ответ

0 голосов
/ 09 января 2012

Вы можете вызвать setFillAfter (true) для самой анимации, прежде чем запускать ее.Это применяет новые координаты к представлению после завершения анимации.

anim.setFillAfter(true);
viewToAnimate.startAnimation(anim);

Если это не сработает, вы можете попробовать установить поля в представлении после завершения анимации.Создайте AnimationListener и установите его для анимации.Затем измените позицию представлений, используя поля в методе onComplete.

final View viewToAnimate = ...;
final int finalX = ...;
final int finalY = ...;

anim.setAnimationListener(new AnimationListener()
            {

            public void onAnimationStart(Animation animation)
            { 
            }

            public void onAnimationRepeat(Animation animation)
            {
            }

            public void onAnimationEnd(Animation animation)
            {
                FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(getLayoutParams());
                lp.setMargins(finalX, finalY, 0, 0);
                viewToAnimate.setLayoutParams(lp);
                viewToAnimate.requestLayout();
            }
        });
viewToAnimate.startAnimation(anim);

Приведенный выше код предполагает, что ваше представление содержится в FrameLayout (отсюда код FrameLayout.LayoutParams)

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

viewToAnimate.layout(finalX, finalY, finalX + viewWidth, finalY + viewHeight);
viewToAnimate.requestLayout();

Попробуйте каждый из этих трех методов и посмотрите, какой из них работает для вас.Надеюсь, метод setFillAfter (true) будет работать как можно проще.

РЕДАКТИРОВАТЬ: К сожалению, я не заметил, что вы уже вызывали setFillAfter.Похоже, это не работает, поэтому попробуйте один из двух других методов

...