在android中循环一个图像帧

时间:2012-05-20 18:00:26

标签: android image animation loops wave

我想做一个动画,一个从右到左移动的波浪。 我制作了一张波浪的图像,其中它的开头与结尾重合

enter image description here

我想做一个动画,其中波动,animationlist我需要超过400帧,应用程序的大小会增长......

我需要一种方法将这个唯一的框架从右向左移动,有什么帮助吗?

3 个答案:

答案 0 :(得分:0)

您可以创建自己的Drawable来实现Animatable,并让图片从右向左移动。这实际上是非常有用的。但是,您无法从XML中指定它,您必须构造它并以编程方式设置它。

答案 1 :(得分:0)

首先,你必须加倍你的图像src的大小,有2波不是一个。 接下来,你必须使用你的imageview的帧边界,你必须只适合一个波。这是线索。

注意到你的图像尺寸,特别是宽度。

对于动画,请使用:

<?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" />
例如,您可以将其命名为res / anim / wave.xml

class(activity?):

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

您可能需要使用图像视图大小,以便持续移动波

答案 2 :(得分:0)

你甚至可以创建一个gif并播放这个GIF: 以下是代码:

Class MainActivity:

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

}

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

可绘制文件夹内的将是您的GIF图像。