我正在尝试使用 android.graphics.Movie
播放来自 /sdcard/download
的 GIF 文件。
如果我将文件放在 APK 的 drawable
文件夹中,我可以使用以下方式加载它:
InputStream istr = context.getResources().openRawResource(R.drawable.animfile);
Movie movie = Movie.decodeStream(istr);
行得通。 movie.duration()
将显示正确的持续时间,我用它来导出 movie.setTime()
的值。
如果我尝试使用 sd 卡加载它而不是 drawable,就会出现问题
String path = Environment.getExternalStorageDirectory() + "/download/animfile.gif";
Movie movie = Movie.decodeFile(path);
由于 movie
不为空,它似乎加载了东西。但问题是 movie.duration()
返回 0
。
知道为什么会发生这种情况,我应该怎么做?
最佳答案
我也遇到过这个问题。经过多次试验和错误后,我使用 getContentResolver().openInputStream 和 android BitmapDecode example 中的死 streamToBytes 代码让它工作。 ,这似乎有效。我还没有找到关于为什么需要对包资源和 sd 文件进行不同处理的解释。
例子:
...
Uri uri = Uri.parse(uriString);
java.io.InputStream is;
try {
is = context.getContentResolver().openInputStream(uri);
}
catch(Exception e) {
}
byte[] array = streamToBytes(is);
Movie movie = Movie.decodeByteArray(array, 0, array.length);
private static 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();
}
关于Android - 无法使用 Movie 类加载 gif 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6005837/