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 } //或 if( imageInfo.isAnimated() ){ //图片为动图 } } });
3.设置
imageView .setImageDrawable(imageDrawable);
4.播放
((Animatable)imageView.getDrawable()) .start(); 或 ((Animatable)drawable) .start();
例:
Boolean isAnim=false;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.P) {
//获取资源
ImageDecoder.Source imageDecoderSource= ImageDecoder.createSource(getResources(),R.drawable.giftest);
try {
//解码
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
isAnim=true;
}
//或
if( imageInfo.isAnimated() ){
//图片是动图
isAnim=true;
}
}
});
//设置
imageView.setImageDrawable(imageDrawable);
//播放
((Animatable)imageView.getDrawable()).start();
//或 ((Animatable)imageDrawable).start();
} catch (IOException e) {
throw new RuntimeException(e);
}
}