2014-02-26 69 views
1

我有以下代碼,用於在應用其他動畫後向ImageView中添加動畫。AnimationDrawable在現有ImageView不會動畫

動畫從未開始。下面是相關的代碼:

// I'm Using Jake Wharton's ButterKnife,a view "injection" library. 
@InjectView(R.id.record_button) 
public ImageView recordButtonView; 

protected void onCreate(Bundle savedInstance) { 
    ... 
    ButterKnife.inject(this); 
    pulsate = AnimationUtils.loadAnimation(this.parent, R.anim.pulsate); 
    recordButtonView.startAnimation(pulsate) 
    ... 
} 

@OnClick(R.id.record_button) 
protected void onButtonClick() { 
    ... 
    // Clear the old animation 
    recordButtonView.clearAnimation(); 

    // Start the new animation 
    recordButtonView.setBackgroundResource(R.drawable.record_button_animation); 
    AnimationDrawable recordButtonAnimation = (AnimationDrawable) recordButtonView.getBackground(); 
    recordButtonAnimation.setCallback(recordButtonView); 
    recordButtonAnimation.setVisible(true, true); 
    recordButtonAnimation.start(); 

    // At this point the animation should be looping. Nothing happens 
    ... 
} 

這裏是record_button_animation.xml(保存在RES /繪製)

<?xml version="1.0" encoding="utf-8"?> 
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" 
android:oneshot="false"> 
    <item android:drawable="@drawable/sing_btn_record" android:duration="500"/> 
    <item android:drawable="@drawable/sing_btn_record_activated" android:duration="500"/> 
</animation-list> 

下面是相應的佈局文件

<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <!-- all sibling elements are removed for clarity --> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/stem"> 

     <!-- all sibling elements are removed for clarity --> 

     <ImageView 
      android:id="@+id/record_button" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/sing_btn_record" 
      android:scaleType="center" 
      android:layout_centerInParent="true"/> 
    </RelativeLayout> 
</RelativeLayout> 

回答

3

希望這有助於:

@OnClick(R.id.record_button) 
protected void onButtonClick() { 
    ... 
    // Clear the old animation 
    recordButtonView.clearAnimation(); 

    // Start the new animation 
    recordButtonView.setBackgroundResource(R.drawable.record_button_animation); 
    // Following line worked for me 
    recordButtonView.setAnimation(pulsate); 

    // At this point the animation should be looping. Nothing happens 
    ... 
} 
+0

不幸的是,它並沒有幫助。最初的動畫(pulsate)剛剛開始,但不是在R.drawable.record_button_animation中定義的動畫) – dornad

1

試試這

ImageView recordButton = (ImageView) findViewById(R.id.imageViewPulse); 
    recordButton.setImageBitmap(null); 
    recordButton.setBackgroundResource(R.anim.pulse); 
    final AnimationDrawable mailAnimation = (AnimationDrawable) recordButton.getBackground(); 
    recordButton.post(new Runnable() { 
     public void run() { 
      if (mailAnimation != null) mailAnimation.start(); 
      } 
    });