2017-04-05 54 views
2

我有兩個ImageViews,一個是順時針旋轉&其他逆時針。 相同的代碼正在爲其他動畫,但輪換,onAnimationEnd沒有被調用。
onAnimationEnd沒有被調用的imageview旋轉動畫

onAnimationEnd在這裏沒有被調用。

public class ObcActivity extends AppCompatActivity implements Animation.AnimationListener { 

    ImageView circularImageView1; 
    ImageView circularImageView2; 
    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView( R.layout.activity_obc); 
//  setContentView( new HeartbeatView(this)); 

     clockAnimation=AnimationUtils.loadAnimation(this, R.anim.rotate_clockwise); 
     antiClockAnimation =AnimationUtils.loadAnimation(this, R.anim.rotate_anticlockwise); 
     clockAnimation.setAnimationListener(this); 
     antiClockAnimation.setAnimationListener(this); 
     clockAnimation.setRepeatCount(-1); 
     antiClockAnimation.setRepeatCount(-1); 
     clockAnimation.setRepeatMode(Animation.INFINITE); 
     antiClockAnimation.setRepeatMode(Animation.INFINITE); 
     circularImageView1= (ImageView) findViewById(R.id.circularImageView1); 
     circularImageView2= (ImageView) findViewById(R.id.circularImageView2); 
     circularImageView1.setAnimation(clockAnimation); 
     circularImageView1.startAnimation(clockAnimation); 
     circularImageView2.setAnimation(antiClockAnimation); 

    } 


    @Override 
    public void onAnimationStart(Animation animation) { 

    } 

    @Override 
    public void onAnimationEnd(Animation animation) { 
     Toast.makeText(this,""+System.currentTimeMillis(),Toast.LENGTH_SHORT).show(); 
     if(animation==clockAnimation){ 
      circularImageView1.setVisibility(View.INVISIBLE); 
      circularImageView2.setVisibility(View.VISIBLE); 
      circularImageView1.clearAnimation(); 
      circularImageView2.startAnimation(clockAnimation); 
     }else { 
      circularImageView2.setVisibility(View.INVISIBLE); 
      circularImageView1.setVisibility(View.VISIBLE); 
      circularImageView1.startAnimation(antiClockAnimation); 
      circularImageView2.clearAnimation(); 
     } 
    } 

    @Override 
    public void onAnimationRepeat(Animation animation) { 

    } 

    Animation clockAnimation, antiClockAnimation; 

} 

XML:

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

    <ImageView 
     android:id="@+id/circularImageView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:layout_gravity="center" 
     android:src="@drawable/ic_circle" 
     /> 
    <ImageView 
     android:id="@+id/circularImageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:layout_gravity="center" 
     android:src="@drawable/outer_ring_2_white" 
     /> 
    <ImageView 
     android:id="@+id/circularImageView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:layout_gravity="center" 
     android:src="@drawable/outer_ring_3_white" 
     /> 

    <ImageView 
     android:id="@+id/circularImageView3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:layout_gravity="center" 
     android:src="@drawable/outer_ring_2_white_out" 
     /> 
    <ImageView 
     android:id="@+id/circularImageView4" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:layout_gravity="center" 
     android:src="@drawable/outer_ring_3_white_out" 
     /> 




    </RelativeLayout> 

enter image description here 更新:

按問題的答案,我設置以下這是不工作的代碼,而不是調用onAnimationEnd。我需要得到第一個圖像的動畫結束的事件!

clockAnimation.setRepeatCount(100); 
     antiClockAnimation.setRepeatCount(100); 
     clockAnimation.setRepeatMode(100); 
     antiClockAnimation.setRepeatMode(100); 
+1

你可以在這裏發佈你的anim文件 –

回答

2

因爲你已經設置INFINITEAnimation

clockAnimation.setRepeatMode(Animation.INFINITE); 

它將與無限模式啓動意味着永遠不會結束

動畫迭代updatation將在onAnimationRepeat

@Override 
public void onAnimationRepeat(Animation animation) { 

} 
通知

什麼document說方法的onAnimationEnd

通知動畫的結尾。此回調不會針對 動畫重複計數設置爲INFINITE調用。

評論

但我需要動畫結束事件。例如在2次旋轉之後。

該代碼添加此行

clockAnimation.setRepeatCount(2); 
clockAnimation.setRepeatMode(Animation.RESTART); 
+0

我應該將我的代碼移動到onAnimationRepeat嗎?但我需要動畫結束事件。例如2次旋轉後.. – AskQ

+0

使用'clockAnimation.setRepeatCount(2);'和'clockAnimation.setRepeatMode(Animation.RESTART);' –

+0

你解決了什麼問題? –

0

看一看的documentationINFINITE動畫:

無效onAnimationEnd(動畫動畫)

通知結束動畫。此回調不會針對 動畫重複計數設置爲INFINITE調用。

在任何情況下,我建議持有兩個Animation.AnimationListener對象並在您的活動中實施一個。這會讓你的代碼更加清晰,並且不需要提問如if(animation==clockAnimation)