2013-06-26 4 views
3

Мне было интересно, как правильно обрабатывать анимацию. Код ниже работает нормально, но анимация начинается только для первого щелчка. После первого нажатия он не работает снова.Анимация работает только при первом нажатии кнопки

Планировка:

<Button 
    android:id="@+id/play" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentTop="true" 
    android:background="@drawable/speaker" /> 

Анимация Файл 'anim.xml':

<animation-list xmlns:android="http://schemas.android.com/apk/res/android" 
android:oneshot="true" > 
<item 
android:drawable="@drawable/choose12" 
android:duration="100"/> 
<item 
android:drawable="@drawable/choose12_1" 
android:duration="100"/> 
<item 
android:drawable="@drawable/choose12_2" 
android:duration="100"/> 
<item 
android:drawable="@drawable/choose12" 
android:duration="100"/> 
</animation-list> 

активность:

final Button speakButton = (Button)findViewById(R.id.play); 
    speakButton.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      String words = getResources().getString(R.string.select_age); 
      speakWords(words); 
      speakButton.setBackgroundResource(R.drawable.anim.xml); 
      AnimationDrawable AppNameAnimation = (AnimationDrawable) speakButton.getBackground(); 
      AppNameAnimation.start(); 
     } 
    }); 

В приведенной выше анимации код работает отлично только для первого нажмите, но он не начнется со второго (или третьего, или N-го) щелчка.

Как я могу начать анимацию каждый раз, когда нажимается кнопка?

ответ

1

Попробуйте следующий путь ... Возможно, это потому, что вы уже установили BackgroundResource в R.drawable.anim.xml. Так что это снова эта строка не может быть скомпилирована компилятором. Думаю, AnimationDrawable не запустится для того же ресурса. Если вы измените его динамически, вы можете его получить.

final Button speakButton = (Button)findViewById(R.id.play); 
    speakButton.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      String words = getResources().getString(R.string.select_age); 
      speakWords(words); 
      speakButton.setBackgroundResource(R.drawable.anim.xml); 
      AnimationDrawable AppNameAnimation = (AnimationDrawable) speakButton.getBackground(); 
      AppNameAnimation.start(); 

      speakButton.post(new Runnable() { 

       @Override 
       public void run() { 

        if(AppNameAnimation.getCurrent() != AppNameAnimation.getFrame(AppNameAnimation.getNumberOfFrames() - 1)) 
        { 
        speakButton.post(this); 
        }else 
        { 
        speakButton.removeCallbacks(this); 
        speakButton.setBackgroundResource(R.drawable.speaker); 
        } 

       } 
      }); 
     } 
    }); 

Надеюсь, это поможет вам.

+0

Hi Gunaselan, Вы код работает очень хорошо для моего приложения. Еще раз спасибо вам большое. – user1731690

+0

Сердечно приветствует вас @ user1731690 – Gunaseelan

1

У меня была аналогичная проблема.

Я установил его, вызывая остановку на анимацию первым, если я уже играл

  mAnimationDrawable.stop(); 
      mImageView.setImageDrawable(mAnimationDrawable); 
      mAnimationDrawable.start();