我正在尝试使用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卡加载它而不是可绘制,则会出现问题
String path = Environment.getExternalStorageDirectory() + "/download/animfile.gif";
Movie movie = Movie.decodeFile(path);
它似乎加载了一些东西,因为电影不是空的.但问题是movie.duration()返回0.
知道为什么会这样,我应该做什么?
解决方法:
我也碰到了这个.经过多次试验和错误后,我使用getContentResolver().openInputStream和android BitmapDecode example中的dead 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,android-sdcard,gif 来源: https://codeday.me/bug/20190518/1128159.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。