Android AnimationDrawable и знать, когда заканчивается анимация - PullRequest
24 голосов
/ 07 февраля 2010

Я хочу сделать анимацию с несколькими графическими файлами, и для этого очень хорошо работает AnimationDrawable. Тем не менее, мне нужно знать, когда анимация начинается и когда она заканчивается (то есть добавить слушателя, такого как Animation.AnimationListener). После поиска ответов у меня плохое предчувствие, что AnimationDrawable не поддерживает слушателей ..

Кто-нибудь знает, как создать покадровую анимацию изображения со слушателем на Android?

Ответы [ 13 ]

0 голосов
/ 10 июня 2014

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

if (spinAnimation.getCurrent().equals(
                    spinAnimation.getFrame(spinAnimation
                            .getNumberOfFrames() - 1))) {
                Toast.makeText(MainActivity.this, "finished",
                        Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(MainActivity.this, "Not finished",
                        Toast.LENGTH_SHORT).show();
            }
0 голосов
/ 23 февраля 2011

Я использовал следующий метод, и он действительно работает.

Animation anim1 = AnimationUtils.loadAnimation( this, R.anim.hori);
Animation anim2 = AnimationUtils.loadAnimation( this, R.anim.hori2);

ImageSwitcher isw=new ImageSwitcher(this);
isw.setInAnimation(anim1);
isw.setOutAnimation(anim2);

Я надеюсь, что это решит вашу проблему.

0 голосов
/ 27 мая 2010

Я полагаю, ваш код не работает, потому что вы пытаетесь изменить представление из не-пользовательского потока. Попробуйте вызвать runOnUiThread (Runnable) из вашей активности. Я использовал его для исчезновения меню после завершения анимации для этого меню. Этот код работает для меня:

Animation ani =  AnimationUtils.loadAnimation(YourActivityNameHere.this, R.anim.fadeout_animation);
menuView.startAnimation(ani);

// Use Timer to set visibility to GONE after the animation finishes.            
TimerTask timerTask = new TimerTask(){
    @Override
    public void run() {
        YourActivityNameHere.this.runOnUiThread(new Runnable(){
            @Override
            public void run() {
                menuView.setVisibility(View.GONE);
            }
        });}};
timer.schedule(timerTask, ani.getDuration());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...