我正在开发一个Android应用程序,我正在尝试显示GIF图像.为此,我使用Movie类并创建了一个扩展View的类GIFView.我从Movie.decodeFile方法获取一个Movie实例.
调用Movie.draw(画布)时出现错误.
04-28 13:44:18.001: A/libc(24883): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 24883 (mple.channel002)
Run Code Online (Sandbox Code Playgroud)
有相关的代码:
public void setGif(File gif)
{
movie = Movie.decodeFile(gif.getAbsolutePath());
}
@Override
public void draw(Canvas canvas) {
// TODO Auto-generated method stub
super.draw(canvas);
canvas.drawColor(0xFFCC3C6C);
if(movie != null)
{
if(movieStart == 0)
movieStart = android.os.SystemClock.uptimeMillis();
int duration = Math.max(movie.duration(), 1000);
movie.setTime((int)(duration - ((android.os.SystemClock.uptimeMillis() - movieStart)%duration)));
movie.draw(canvas, 10, 10);//TODO CRASH
invalidate();
}
}
Run Code Online (Sandbox Code Playgroud)
我在main中创建一个GIFView,调用上面的setGIF方法为它提供路径并使用FillParent参数将其添加到布局中.当我在ImageView中打印此图像时,它可以工作.在画布中绘制一个drawable而不是GIF也可以.所以问题似乎是处理Movie实例.
我使用这些链接制作了GIFView http://weavora.com/blog/2012/02/07/android-and-how-to-use-animated-gifs/
我也尝试过这种方式但在movie.draw上的相同错误关于 Android的Movie类的信息
编辑1:我在Android 4.4.2/snapdragon 801/2GB上对Oppo Find 7a进行测试将movie.draw(canvas,10,10)更改为movie.draw(canvas,10f,10f)不会改变任何内容.
编辑2:我刚刚在一台旧的中兴通讯设备上使用Android 2.3.5进行了测试,并且它运行了..所以在Find7a设备上启动时出现问题,但我无法弄清楚是什么:(