最佳答案
我一直在尝试使用 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/