为什么我的gif图像没有动画效果?

时间:2013-11-04 20:34:37

标签: android animated-gif

我目前正在尝试使用电影在自定义视图中显示gif图像。我确实用最常用的方法来做到这一点:

public class GifView extends View {

    private Movie movie;
    private long timeElapsed;

    public GifView(Context context) {
        super(context);
        init();
    }

    public GifView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public GifView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        timeElapsed = 0;
        setImage(getResources().openRawResource(R.drawable.sample));
    }

    public void setImage(byte[] bytes) {
        movie = Movie.decodeByteArray(bytes, 0, bytes.length);
        invalidate();
    }

    public void setImage(InputStream is) {
        movie = Movie.decodeStream(is);
        invalidate();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawColor(Color.TRANSPARENT);
        super.onDraw(canvas);

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

这仅显示我手机上GIF的第一帧(运行API 18的Nexus 4)。 我已经读过,为了使它显示,需要禁用此视图的hardwareAcceleration(如果删除相关行,则无需显示)。 我已尝试与其他gif图像,并得到相同的结果。 我注意到的一件事是movie.getDuration()总是返回0,这很奇怪吧? 有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果您需要在Android中正确播放GIF,我想您应该使用第三个库,因为该框架本身不支持该格式。您可能感兴趣的几个项目是

  • ImageViewEx:扩展Android的ImageView,支持动画GIF并包含更好的密度管理

  • ION:Android异步网络变得简单。获得了GIF支持few days ago,并且明确适合下载和显示远程GIF。