J'utilise la classe ci-dessous. Comment puis-je arrêter et démarrer la boucle en fonction des événements de clic? J'ai essayé de supprimer invalidate(), mais Gif ne démarre pas du tout.Comment arrêter l'animation gif dans Android?
classe GifView
import java.io.InputStream;
import com.example.merchant.R;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Movie;
import android.os.SystemClock;
import android.util.AttributeSet;
import android.view.View;
public class GifView extends View{
private InputStream gifInputStream;
private Movie gifMovie;
private int movieWidth, movieHeight;
private long movieDuration;
private long movieStart;
public GifView(Context context) {
super(context);
init(context);
}
public GifView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public GifView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
private void init(Context context) {
setFocusable(true);
gifInputStream = context.getResources().openRawResource(R.drawable.ani_bart);
gifMovie = Movie.decodeStream(gifInputStream);
movieWidth = gifMovie.width();
movieHeight = gifMovie.height();
movieDuration = gifMovie.duration();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(movieWidth, movieHeight);
}
public int getMovieWidth() {
return movieWidth;
}
public int getMovieHeight() {
return movieHeight;
}
public long getMovieDuration() {
return movieDuration;
}
@Override
protected void onDraw(Canvas canvas) {
long now = SystemClock.uptimeMillis();
if(movieStart == 0) {
movieStart = now;
}
if(gifMovie != null) {
int dur = gifMovie.duration();
if(dur == 0) {
dur = 1000;
}
int relTime = (int)((now - movieStart) % dur);
gifMovie.setTime(relTime);
gifMovie.draw(canvas, 0, 0);
invalidate();
}
}
}
Ajouter un 'boolean' champ à la classe - par exemple,' isPlaying private boolean; '- vérifier la première chose' onDraw() 'et' revenir, 'si c'est' false'. Créez des méthodes publiques pour démarrer et arrêter, en définissant le champ de manière appropriée dans chacune d'elles, puis appelez 'invalidate()' à la fin de la méthode de démarrage. –
Pouvez-vous me dire le code que je devrais utiliser dans la méthode stop, quand je veux terminer l'animation? – Anirudh
'isPlaying = false;' –