2012-12-08 65 views
2

我的應用程序出現問題:我想在重複動畫時修改ImageView,但不調用onAnimationRepeat函數(來自AnimationListener類)。Android(API 7) - 動畫:onAnimationRepeat

這是一個樣本,以重現:

  • 創建一個新項目 「測試」(Android 2.1系統,API 7)(我用com.test.test包名稱)
  • 創建res文件夾內的文件夾anim和創建fade_in.xml與這些線

fade_in.xml

的一個ctivity代碼:

package com.test.test; 

import android.app.Activity; 
import android.graphics.Color; 
import android.graphics.PorterDuff.Mode; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.animation.Animation; 
import android.view.animation.AnimationUtils; 
import android.view.animation.Animation.AnimationListener; 
import android.widget.Button; 
import android.widget.ImageView; 

public class TestActivity extends Activity { 

    Button button = null; 
    ImageView image = null; 

    Animation animation = null; 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     button = (Button)findViewById(R.id.button1); 
     image = (ImageView)findViewById(R.id.imageView1); 

     animation = AnimationUtils.loadAnimation(this, R.anim.fade_in); 
     animation.setAnimationListener(new AnimationListener() {    

      int repeatNumber = 0; 

      @Override 
      public void onAnimationStart(Animation animation) {Log.i("start", "start");} 

      @Override 
      public void onAnimationEnd(Animation animation) {Log.i("end", "end");} 

      @Override 
      public void onAnimationRepeat(Animation animation) { 
       repeatNumber++; 
       Log.i("repeat", String.valueOf(repeatNumber)); 
       switch(repeatNumber) 
       { 
       case 1:image.setColorFilter(Color.RED, Mode.MULTIPLY);break; 
       case 2:image.setColorFilter(Color.BLUE, Mode.MULTIPLY);break; 
       case 3:image.setColorFilter(Color.YELLOW, Mode.MULTIPLY);break; 
       default:break; 
       } 
      } 
     }); 

     button.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) {image.startAnimation(animation);} 
     }); 

    } 
} 

而且佈局:

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

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button" /> 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/ic_launcher" /> 

</LinearLayout> 

ImageView顏色不會改變......你能幫助我嗎?

+1

請檢查計數器的變量值,也許它不會重置 – Pratik

+0

Log.i(「repeat」,String.valueOf(repeatNumber)); =>它永遠不會出現在logcat中。 repeatNumber僅爲樣本創建。 – user1887611

回答

3

方法AnimationUtils.loadAnimation()返回一個Animation數組。

您必須在此數組的項目上設置事件。

您可以將指令

animation = AnimationUtils.loadAnimation(this, R.anim.fade_in); 

所以以後申報AnimationSet

AnimationSet animation = null; 

你可以寫:

for (Animation a : animation.getAnimations()) 
     a.setAnimationListener(new AnimationListener() { 

      @Override 
      public void onAnimationStart(Animation animation) {} 

      @Override 
      public void onAnimationRepeat(Animation animation) { 
       Log.i("repeat", "repeat"); 
      } 

      @Override 
      public void onAnimationEnd(Animation animation) {} 
     }); 

這將工作。

+0

animation =(AnimationSet)AnimationUtils.loadAnimation(this,R.anim.fade_in); 我確認,它完美的工作(我會將您的解決方案提交給Ed Lalouche!)。 非常感謝! – user1887611

0

要重複動畫,您需要設置動畫的重複模式和重複出現次數。

anim.setRepeatMode(Animation.INFINITE); 
anim.setRepeatCount(5); 
+1

我試過用代碼來代替xml文件,它不會改變任何東西。 android:repeatCount =「3」在xml文件中工作,但是不會調用監聽器中的onAnimationRepeat函數。 – user1887611

0

我面臨同樣的問題,並閱讀了很多資源和動畫問題的答案。每個人都在抱怨AnimationSet和重複計數問題。所以我從XML中刪除了標籤,它工作。 OnRepeat和onEnd現在都被調用了。