Pregunta

Quiero hacer una animación, una ola que se mueve de derecha a izquierda.Hice una imagen de una ola donde el inicio coincide con el final.

enter image description here

Quiero hacer una animación donde se mueva la ola, con un animationlist Necesitaría más de 400 fotogramas y el tamaño de la aplicación crecería...

Necesito una forma de mover este único cuadro de derecha a izquierda, ¿alguna ayuda?

¿Fue útil?

Solución

Podrías crear un Drawable propio que implementa Animatable, y haga que la imagen se mueva de derecha a izquierda.De hecho, sería bastante útil tenerlo.Sin embargo, no podrá especificarlo desde XML, tendrá que construirlo y configurarlo mediante programación.

Otros consejos

Incluso puedes crear un GIF y jugar este GIF: A continuación se muestra el código:

principal de clase:

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

}

Clase 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 de la carpeta Dibujable será su imagen GIF.

Primero, tiene que duplicar el tamaño de su imagen SRC, que tiene 2 olas no una. A continuación, debe jugar con los límites de marco de su ImageView, debe colocarlo solo una onda .Esta es la pista.

Después de tomar nota de su tamaño de imagen, especialmente el ancho.

para la animación, use esto:

<?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" />

Por ejemplo, puede nombrarlo res / anim / wave.xml

clase (actividad?):

    ...
    Animation anim = AnimationUtils.loadAnimation( this, R.anim.wave);
    anim.setRepeatMode(Animation.Infinite);
    animatedIm = (ImageView) findviewbyid(<your-id>)
    animatedIm.setAnimation(anim); 

Es posible que deba jugar con el tamaño de ImageView, para tener una onda continua en movimiento

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top