2012-06-26 8 views
7

android.my에서 반복적으로 반복되는 이미지 뷰를 회전하고 싶습니다. 코드가 반복적으로 작동합니다. repeat mode.if 반복 모드 반복 애니메이션을 설정하지 않았지만 이미지 뷰는 정적으로 일부 각도 회전 그리고 나는 하나의 루프가 애니메이션을 회전 시키길 원한다.이미지 회전 애니메이션 안드로이드에서 루프가 작동하지 않음

여기에 사전에 여기 내 자바 클래스

import android.app.Activity; 
import android.os.Bundle; 
import android.view.animation.Animation; 
import android.view.animation.Animation.AnimationListener; 
import android.view.animation.AnimationUtils; 
import android.widget.ImageView; 

public class AnimationActivity extends Activity { 
    /** Called when the activity is first created. */ 
    ImageView my_image; 
    AnimationListener listener; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     listener = new AnimationListener() { 
      @Override public void onAnimationStart(Animation animation) {} 
      @Override public void onAnimationRepeat(Animation animation) {} 
      @Override 
      public void onAnimationEnd(Animation animation) { 
       System.out.println("End Animation!"); 
       //load_animations(); 
      } 
     }; 

     my_image=(ImageView)findViewById(R.id.my_img); 
     load_animations(); 



    } 
    void load_animations() 
    { 
     new AnimationUtils(); 
     Animation rotation = AnimationUtils.loadAnimation(this, R.anim.rotation); 
     rotation.setRepeatCount(-1); 
     rotation.setRepeatMode(2); 
     rotation.setAnimationListener(listener); 
     my_image.startAnimation(rotation); 
    } 

} 

감사의 애니메이션 XML

<?xml version="1.0" encoding="utf-8"?> 
<rotate 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromDegrees="45" 
    android:toDegrees="45" 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:duration="100" 
    android:startOffset="0" 
/> 

입니다!

답변

10

마지막으로, 나는 솔루션은 XML을 아래에 시도되었다 :

<?xml version="1.0" encoding="utf-8"?> 
<rotate 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromDegrees="0" 
    android:toDegrees="360" 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:duration="2000" 
    android:repeatMode="reverse" 
    android:repeatCount="infinite" 
    android:startOffset="0" 
/> 

여기에 코드가 완벽하게 작동하고있어 내 수업

import android.app.Activity; 
import android.os.Bundle; 
import android.view.animation.Animation; 
import android.view.animation.Animation.AnimationListener; 
import android.view.animation.AnimationUtils; 
import android.widget.ImageView; 

public class AnimationActivity extends Activity { 
    /** Called when the activity is first created. */ 
    ImageView my_image; 
    AnimationListener listener; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     listener = new AnimationListener() { 
      @Override public void onAnimationStart(Animation animation) {} 
      @Override public void onAnimationRepeat(Animation animation) {} 
      @Override 
      public void onAnimationEnd(Animation animation) { 
       System.out.println("End Animation!"); 
       //load_animations(); 
      } 
     }; 

     my_image=(ImageView)findViewById(R.id.my_img); 
     load_animations(); 



    } 
    void load_animations() 
    { 
     new AnimationUtils(); 
     Animation rotation = AnimationUtils.loadAnimation(this, R.anim.rotation); 
     rotation.setAnimationListener(listener); 
     my_image.startAnimation(rotation); 
    } 

} 

입니다!

내 문제가 해결되었습니다.

0

인터넷 답변을 통해 조사한 결과, 완벽하게 작동하는 솔루션을 발견했습니다. (그리고 네, repeatCount와 repeatMode는 animationSet과 함께 사용될 때 상당히 버그가 있습니다).

anim_rotate_fade.xml :

요요
<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:interpolator="@android:anim/accelerate_decelerate_interpolator" 
    android:ordering="together" > 

    <objectAnimator 
     android:duration="3000" 
     android:propertyName="rotation" 
     android:repeatCount="1" 
     android:valueTo="360" 
     android:valueType="floatType" /> 

    <objectAnimator 
     android:duration="3000" 
     android:propertyName="alpha" 
     android:repeatCount="1" 
     android:repeatMode="reverse" 
     android:valueFrom="0.0" 
     android:valueTo="0.3" 
     android:valueType="floatType" /> 

    <objectAnimator 
     android:duration="3000" 
     android:propertyName="y" 
     android:repeatCount="1" 
     android:repeatMode="reverse" 
     android:valueFrom="380" 
     android:valueTo="430" 
     android:valueType="floatType" /> 

</set> 

: 은 (애니메이션을 종료 한 후, 약간의 지연을 도입하여 해결).

ImageView starlightImageView = new ImageView(this); 
starlightImageView.setImageResource(R.drawable.starlight); 
final AnimatorSet animate = (AnimatorSet) AnimatorInflater.loadAnimator(this, R.anim.anim_rotate_fade); 
AnimatorListenerAdapter animatorListener = new AnimatorListenerAdapter() { 
    @Override 
    public void onAnimationEnd(Animator animation) { 
     super.onAnimationEnd(animation); 
     new Handler().postDelayed(new Runnable() { 
      @Override public void run() { 
       animate.start(); 
      } 
     }, 1000); 
    } 
}; 
animate.setTarget(starlightImageView); 
animate.addListener(animatorListener); 

연구하고 싶은 수업이 많이 있지만 현재 매우 유연한 objectAnimator를 사용하고 있습니다.

  • 애니메이션
  • AnimationUtils
  • 애니메이터
  • AnimatorInflater
  • AnimatorListener
  • AnimatorListenerAdapter
: 나는 애니메이션 또는 AnimationUtils을 사용하는 것이 좋습니다 않을 것
관련 문제