Looping un telaio dell'immagine in Android
Domanda
Voglio fare un'animazione, un'onda che si sposta da destra a sinistra. Ho fatto un'immagine di un'onda dove l'inizio di esso coincide con la fine
Voglio fare un'animazione in cui la mossa dell'onda, con un animationlist
avrei bisogno di più di 400 fotogrammi e le dimensioni dell'applicazione crescerebbero ...
Ho bisogno di un modo per spostare questo solo telaio da destra a sinistra, qualsiasi aiuto?
Soluzione
È possibile creare un Drawable
del tuo che implementa Animatable
e che l'immagine si sposta da destra a sinistra.In realtà sarebbe una cosa utile avere.Tuttavia, non saresti stato in grado di specificarlo da XML, dovrai costruirlo e impostarlo programmaticamente.
Altri suggerimenti
Puoi persino creare un GIF e riprodurre questa GIF: Di seguito è riportato il codice:
Maineattività della classe:
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MYGIFView(MainActivity.this));
}
}
.
Classe MyGIFView:
import java.io.InputStream;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Movie;
import android.view.View;
class MYGIFView extends View {
Movie movie, movie1;
InputStream is = null, is1 = null;
long moviestart;
public MYGIFView(Context context) {
super(context);
// Provide your own gif animation file
is = context.getResources().openRawResource(R.drawable.animation);
movie = Movie.decodeStream(is);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.WHITE);
super.onDraw(canvas);
long now = android.os.SystemClock.uptimeMillis();
System.out.println("now=" + now);
if (moviestart == 0) { // first time
moviestart = now;
}
System.out.println("\tmoviestart=" + moviestart);
int relTime = (int) ((now - moviestart) % movie.duration());
System.out.println("time=" + relTime + "\treltime=" + movie.duration());
movie.setTime(relTime);
movie.draw(canvas, this.getWidth() / 2 - 20, this.getHeight() / 2 - 40);
this.invalidate();
}
}
.
Dentro la cartella Diseggi sarà la tua immagine GIF.
In primo luogo, devi raddoppiare le dimensioni dell'immagine SRC, con 2 onde non una. Successivamente, devi giocare con i limiti del telaio della tua imageview, devi adattarsi solo una onda.Questo è l'indizio.
Dopo aver preso nota della dimensione della tua immagine, in particolare la larghezza.
Per l'animazione, usa questo:
.
<?xml version="1.0" encoding="utf-8"?>
<translate
xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0%"
android:toXDelta="-50%"
android:fromYDelta="0%"
android:toYDelta="0%"
android:duration="500"
android:repeatCount="1000"
android:interpolator="@android:anim/linear_interpolator"
android:zAdjustment="top" />
Ad esempio è possibile chiamarlo res / anim / wave.xml
Classe (attività?):
.
...
Animation anim = AnimationUtils.loadAnimation( this, R.anim.wave);
anim.setRepeatMode(Animation.Infinite);
animatedIm = (ImageView) findviewbyid(<your-id>)
animatedIm.setAnimation(anim);
Potrebbe essere necessario giocare con le dimensioni dell'imaciplicazione, per avere un movimento continuo in movimento