有关Android电影课程的信息

Add*_*dev 4 java animation android image

我正试图展示一个GIF动画.顺便说一下,我正在用电影课做这件事.但Android Developer页面不会授予有关方法的信息.

如何调整gif以适应布局?

提前致谢

cap*_*lla 5

我一直在尝试使用这种方法做同样的事情(显示动画GIF).

只有在指定uses-sdk android:minSdkVersion ="3"时才有效

用于缩放...

package com.example.GIFShow;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Movie;
import android.graphics.Rect;
import android.util.Log;
import android.view.View;


class MYGIFView extends View {

private static final boolean twigDebug = true;

private Movie mMovie;
private long mMovieStart;

MYGIFView(Context aContext, Movie aMovie) {
    super(aContext);

    if (aMovie == null)
        return;

    mMovie = aMovie;
    mMovieStart = android.os.SystemClock.uptimeMillis();
}

protected void onDraw(Canvas aCanvas) {
    super.onDraw(aCanvas);

    if (mMovie == null || mMovie.duration() == 0)
        return;

    int relTime = (int)((android.os.SystemClock.uptimeMillis() - mMovieStart)
                        % mMovie.duration());
    mMovie.setTime(relTime);

    Bitmap movieBitmap = Bitmap.createBitmap(mMovie.width(), mMovie.height(),
                                             Bitmap.Config.ARGB_8888);
    Canvas movieCanvas = new Canvas(movieBitmap);
    mMovie.draw(movieCanvas, 0, 0);

    Rect src = new Rect(0, 0, mMovie.width(), mMovie.height());
    Rect dst = new Rect(0, 0, this.getWidth(), this.getHeight());
    aCanvas.drawBitmap(movieBitmap, src, dst, null);

    this.invalidate();
}

}
Run Code Online (Sandbox Code Playgroud)

现在,您可以通过以下两种方式之一获取并将Movie对象传递给该类...

从项目可绘制文件夹中获取输入GIF Movie对象

    Movie movie = Movie.decodeStream
        (context.getResources().openRawResource(R.drawable.somefile));
Run Code Online (Sandbox Code Playgroud)

或者从外部存储器获取输入GIF Movie对象(/ mnt/sdcard .../mnt/extSdCard ...等)

    Movie movie = null;
    try {
        FileInputStream stream =
        new FileInputStream(Environment.getExternalStorageDirectory() +
                            "/somefolder/somefile.gif");
        try {
            byte[] byteStream = streamToBytes(stream);
            movie = Movie.decodeByteArray(byteStream, 0, byteStream.length);
        }
        finally {
            stream.close();
        }
    }
    catch (IOException e) { }
Run Code Online (Sandbox Code Playgroud)

现在将移动的GIF图像/电影对象设置到您的活动视图中:

    View view = new MYGIFView(this, movie);
    setContentView(view);
Run Code Online (Sandbox Code Playgroud)

如果从外部存储器获取GIF图像/电影对象(第二个示例),则需要支持例程:

private byte[] streamToBytes(InputStream is) {

    ByteArrayOutputStream os = new ByteArrayOutputStream(1024);
    byte[] buffer = new byte[1024];

    int len;
    try {
        while ((len = is.read(buffer)) >= 0)
            os.write(buffer, 0, len);
    }
    catch (java.io.IOException e) { }

    return os.toByteArray();
}
Run Code Online (Sandbox Code Playgroud)