Android GIF播放

时间:2012-03-26 14:10:17

标签: android image gif animated-gif

我正在使用API​​演示中的BitmapDecode活动中的SampleView来显示动画GIF图像。

    private static class SampleView extends View {


    private Movie mMovie;
    private long mMovieStart;

    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();
    }

    public SampleView(Context context) {
        super(context);
        setFocusable(true);

        this.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

        java.io.InputStream is;

        is = context.getResources().openRawResource(R.drawable.angel);
        //Why was this put in an if statement if we default it to true?
        if (true) {
            mMovie = Movie.decodeStream(is);
        } else {
            byte[] array = streamToBytes(is);
            mMovie = Movie.decodeByteArray(array, 0, array.length);
        }
    }

    @Override protected void onDraw(Canvas canvas) {
        //canvas.drawColor(0xFFCCCCCC);            

        Paint p = new Paint();
        p.setAntiAlias(true);


        long now = android.os.SystemClock.uptimeMillis();
        if (mMovieStart == 0) {   // first time
            mMovieStart = now;
        }
        if (mMovie != null) {
            int dur = mMovie.duration();
            if (dur == 0) {
                dur = 1000;
            }
            int relTime = (int)((now - mMovieStart) % dur);
            mMovie.setTime(relTime);
            mMovie.draw(canvas, (getWidth()/2) - (mMovie.width()/2),0);
            invalidate();
        }
    }
}

到目前为止,我有机会测试3款设备,Sidekick 4g,Epic Touch 4g(Galaxy SII)和Nexus S.

gif在sidekick和galaxy s II上正确显示。但是在Nexus S上,第一帧正确显示,然后在每隔一帧上,图像被静态线条填充,就像信号很弱的电视一样。

我还测试了Nexus S上的API演示中的DecodeBitmap活动,其中包含的动画gif在该设备上正确显示。

如果我将API演示中的“animated_gif.gif”标记图像拖放到我的应用程序中,它会正确显示。

我对gif文件格式不是很熟悉,我的gif是否可以通过某种设备而不是其他设备的方式进行格式化?如果有的话,是否有任何关于使用什么工具/如何使其格式化的提示,以便它可以在尽可能多的设备上工作?

0 个答案:

没有答案