Domanda

Ho creato un layout con una vista di immagine e una vista web. La vista web è impostato per avere una visibilità predefinita di andata. Quando i fuochi attività su esso visualizza la visualizzazione dell'immagine prima e quando la visualizzazione web ha finito di caricare l'URL, si contraddistingue come visibile e l'imageview è contrassegnato come nascosto.

Quando viene visualizzato l'ImageView, vorrei di ruotare più volte solo per un po 'Pizazz aggiunto.

Non ho mai fatto prima nella animazioni Android e tutti i messaggi che ho trovato quando ho chiesto internet non è disponibile; in tal modo, sono tornato a SO di aiuto.

Quindi, se mi metto con questo ...

    final ImageView splash = (ImageView)findViewById(R.id.splash);

Come si crea un'animazione rotazione ripetuto e applicarlo al ImageView?

Grazie ancora!

È stato utile?

Soluzione

Utilizzare un RotateAnimation , impostando il punto di articolazione alla centro della vostra immagine.

RotateAnimation anim = new RotateAnimation(0f, 350f, 15f, 15f);
anim.setInterpolator(new LinearInterpolator());
anim.setRepeatCount(Animation.INFINITE);
anim.setDuration(700);

// Start animating the image
final ImageView splash = (ImageView) findViewById(R.id.splash);
splash.startAnimation(anim);

// Later.. stop the animation
splash.setAnimation(null);

Altri suggerimenti

Come ruotare un'immagine attorno al suo centro:

ImageView view = ... //Initialize ImageView via FindViewById or programatically

RotateAnimation anim = new RotateAnimation(0.0f, 360.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

//Setup anim with desired properties
anim.setInterpolator(new LinearInterpolator());
anim.setRepeatCount(Animation.INFINITE); //Repeat animation indefinitely
anim.setDuration(700); //Put desired duration per anim cycle here, in milliseconds

//Start animation
view.startAnimation(anim); 
//Later on, use view.setAnimation(null) to stop it.

In questo modo l'immagine da ruotare attorno al proprio centro (0,5 o 50% della sua larghezza / altezza). Sto inviando questo per futuri lettori che arrivare qui da Google, come me, e che desiderano per ruotare l'immagine attorno al suo centro senza definire detto centro in pixel assoluti.

Si può anche semplicemente utilizzare la funzione di animazione Ruota. Che esegue un'animazione specifica, per un importo predeterminato di tempo, su un ImageView.

Animation rotate = AnimationUtils.loadAnimation([context], R.anim.rotate_picture);
splash.startAnimation(rotate);

Quindi creare un file XML di animazione nelle vostre res / anim chiamato rotate_picture con il contenuto:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="false">

    <rotate 
    android:fromDegrees="0"
    android:toDegrees="360"
    android:duration="5000"
    android:pivotX="50%"
    android:pivotY="50%">
</rotate>
</set>

Ora, purtroppo, questo sarà solo eseguirlo una volta. Avrete bisogno di un loop da qualche parte per farla ripetere l'animazione mentre sta aspettando. Ho sperimentato un po 'e ho trovato il mio programma bloccato in un loop infinito, quindi non sono sicuro del modo migliore per questo. EDIT: La risposta di Christopher fornisce le informazioni su come farlo ciclo correttamente, in modo di rimuovere il mio cattivo suggerimento su thread separati

Un modo - Spalato immagine in N ruotando leggermente ogni volta. Direi che 5 è sufficiente. quindi creare qualcosa di simile in drawable

<animation-list   android:id="@+id/handimation" android:oneshot="false" 
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/progress1" android:duration="150" />
    <item android:drawable="@drawable/progress2" android:duration="150" />
    <item android:drawable="@drawable/progress3" android:duration="150" />
 </animation-list> 

inizio codice

progress.setVisibility(View.VISIBLE);
AnimationDrawable frameAnimation = (AnimationDrawable)progress.getDrawable();
frameAnimation.setCallback(progress);
frameAnimation.setVisible(true, true);

fermata codice

AnimationDrawable frameAnimation = (AnimationDrawable)progress.getDrawable();
frameAnimation.stop();
frameAnimation.setCallback(null);
frameAnimation = null;
progress.setVisibility(View.GONE);

qui

imgDics = (ImageView) v.findViewById(R.id.img_player_tab2_dics);
    imgDics.setOnClickListener(onPlayer2Click);
    anim = new RotateAnimation(0f, 360f,
            Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
                            0.5f);
    anim.setInterpolator(new LinearInterpolator());
    anim.setRepeatCount(Animation.INFINITE);
    anim.setDuration(4000);

    // Start animating the image
    imgDics.startAnimation(anim);

All'interno dell'elemento messo:

android:repeatCount="infinite"

ho scoperto, che se si utilizza il .getWidth / 2, ecc ... che non funzionerà è necessario per ottenere il numero di pixel dell'immagine è e dividerlo per 2 soli e poi basta digitare il il numero per gli ultimi 2 argomenti.

così dire l'immagine era di 120 pixel per pixel quadrati 120, ur x ed y sarebbe pari a 60 pixel. così nel codice, si farebbe a destra:

RotateAnimation anim = new RotateAnimation(0f, 350f, 60f, 60f);
anim.setInterpolator(new LinearInterpolator());
anim.setRepeatCount(Animation.INFINITE);
anim.setDuration(700);

ed ora la vostra immagine ruoterà intorno al suo centro.

codice di verifica:

imageView.setImageResource(R.drawable.ic_arrow_up);

boolean up = true;

if (!up) { 
    up = true; 
    imageView.startAnimation(animate(up)); 
} else { 
    up = false; 
    imageView.startAnimation(animate(up)); 
}

private Animation animate(boolean up) {
    Animation anim = AnimationUtils.loadAnimation(this, up ? R.anim.rotate_up : R.anim.rotate_down);
    anim.setInterpolator(new LinearInterpolator()); // for smooth animation
    return anim;
}

drawable / ic_arrow_up.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="24dp"
        android:height="24dp"
        android:viewportWidth="24.0"
        android:viewportHeight="24.0">
    <path
        android:fillColor="#3d3d3d"
        android:pathData="M7.41,15.41L12,10.83l4.59,4.58L18,14l-6,-6 -6,6z"/>
</vector>

Anim / rotate_up.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true"
    android:fillEnabled="true">
    <rotate
        android:duration="200"
        android:fromDegrees="-180"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="0" />
</set>

Anim / rotate_down.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true"
    android:fillEnabled="true">
    <rotate
        android:duration="200"
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="180" />
</set>

Non duri limiti immagine del codice. Basta usare:

RotateAnimation anim = new RotateAnimation( fromAngle, toAngle, imageView.getDrawable().getBounds().width()/2, imageView.getDrawable().getBounds().height()/2);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top