java - 有关 Android 电影类的信息

标签 java android image animation

我正在尝试显示动画 gif。顺便说一下,我正在用类 Movie 做这件事.但是 Android 开发者页面不提供有关这些方法的信息。

如何调整 gif 的大小以适应布局?

提前致谢

最佳答案

我一直在尝试使用 this 做同样的事情(显示动画 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();
}

}

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

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

    Movie movie = Movie.decodeStream
        (context.getResources().openRawResource(R.drawable.somefile));

或者从外部存储中获取输入的 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) { }

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

    View view = new MYGIFView(this, movie);
    setContentView(view);

如果您从外部存储中获取 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();
}

关于java - 有关 Android 电影类的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7373718/

相关文章:

java - JMenuItem 和 JMenu 在 JMenu 组件外部使用 - JMenu 子菜单不起作用

android - 当在 FrameLayout 中查看时,layout_marginLeft 在 Android API < 11 上正常工作

jquery - 具有淡入淡出效果的图像悬停 - 使它们居中

javascript - jQuery Ajax加载图片问题

android - 如何在 DBAdapter 中创建具有 BLOB 类型列的表

java - 将长字符串写入 HTML 文件,InputStream、FileWriter 与 BufferedReader

由于 Eclipse IDE 导致的 Java 通用问题

Java split() 方法最后去除空字符串?

android - 如何从其他 fragment 调用 fragment 中的 AsyncTask?

java - 如何在android中使用cardview