aph*_*aph 5 android gif android-sdcard
我正在尝试用来android.graphics.Movie
播放GIF文件/sdcard/download
.
如果我把文件放在drawable
APK 的文件夹中,我可以使用以下命令加载它:
InputStream istr = context.getResources().openRawResource(R.drawable.animfile);
Movie movie = Movie.decodeStream(istr);
Run Code Online (Sandbox Code Playgroud)
这样可行.movie.duration()
将显示正确的持续时间,我用它来获取值movie.setTime()
.
如果我尝试从SD卡加载它而不是可绘制,则会出现问题
String path = Environment.getExternalStorageDirectory() + "/download/animfile.gif";
Movie movie = Movie.decodeFile(path);
Run Code Online (Sandbox Code Playgroud)
这似乎加载的东西如movie
不为空.但问题是movie.duration()
回报0
.
知道为什么会这样,我应该做什么?
小智 3
我也遇到了这个。经过多次尝试和错误后,我使用 getContentResolver().openInputStream 和 android BitmapDecode 示例中的死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();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3776 次 |
最近记录: |