ImageDecoder解码GIF、ImageView显示GIF

ImageDecode可以解码GIF文件,并使其可以显示在ImageView控件上

ImageView使用setImageResource(int id)显示GIF图仅显示初始静态图

1.创建资源类  ImageDecoder.Source

ImageDecoder.Source imageDecoderSource =  ImageDecoder.createSource( getResources() , R.drawable.~ );

2.解码 Drawable

Drawable imageDrawable=ImageDecoder.decodeDrawable(imageDecoderSource,
               new ImageDecoder.OnHeaderDecodedListener() {
    public void onHeaderDecoded(ImageDecoder imageDecoder , ImageDecoder.ImageInfo imageInfo , ImageDecoder.Source source) {
        //解码完成时执行
        //imageInfo为图片信息
        if( imageInfo.getMiMeType() .equals(" image/gif "){
             //图片类型为GIF
        }
    }
});

3.设置

imageView .setImageDrawable(imageDrawable);

4.播放

((Animatable)imageView.getDrawable()) .start();
或
((Animatable)drawable) .start();

例:

Drawable imageDrawable=null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.P) {

            //获取资源
            ImageDecoder.Source imageDecoderSource= ImageDecoder.createSource(getResources(),R.drawable.giftest);
            try {
                //解码
                imageDrawable=ImageDecoder.decodeDrawable(imageDecoderSource,
                               new ImageDecoder.OnHeaderDecodedListener() {
                    public void onHeaderDecoded(ImageDecoder imageDecoder,ImageDecoder.ImageInfo imageInfo,ImageDecoder.Source source) {
                        //解码完成执行
                        //imageInfo为图片信息
                        if( imageInfo.getMimeType().equals("image/gif")){
                            //图片类型为gif
                            //设置
                            imageView.setImageDrawable(imageDrawable);
                            
                            //播放
                            ((Animatable)imageView.getDrawable()).start();
                            //或  ((Animatable)imageDrawable).start();
                        }
                    }
                });
            } catch (IOException e) {
                throw new RuntimeException(e);
            }

}

你可能感兴趣的:(android,java)