2012-06-26 23 views
7

Voglio ruotare imageview con ciclo continuo su android.my il codice ruota funziona perfettamente con la modalità di ripetizione set out.if ho impostato la modalità di ripetizione l'animazione di ripetizione non funziona ma, imageview rotazione statica dell'angolo e voglio che il loop ruoti l'animazione, chiunque può aiutarmi con molto apprezzato!Immagine Ruota animazione Ripresa non funziona su Android

ecco animazione 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" 
/> 

ecco la mia classe Java

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); 
    } 

} 

Grazie in anticipo!

risposta

10

finalmente, mi sono soluzione provo qui di seguito 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" 
/> 

ecco la mia classe

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); 
    } 

} 

Questo è il codice è perfettamente funzionante!

Il mio problema è stato risolto!

0

Dopo aver cercato tra le risposte di Internet, ho trovato una soluzione che funziona perfettamente per me. (E sì, repeatCount e repeatMode sono estremamente buggy se usati insieme a 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> 

in attività: (risolverlo con l'introduzione di un leggero ritardo dopo l'animazione si è conclusa).

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); 

Ci sono un sacco di classi che si desidera per la ricerca, ma attualmente sto usando objectAnimator quali è altamente flessibile. Non vorrei raccomandare di utilizzare l'animazione o AnimationUtils:

  • Animazione
  • AnimationUtils
  • Animator
  • AnimatorInflater
  • AnimatorListener
  • AnimatorListenerAdapter