gif图片只显示一次

Glide.with(this).asGif().load(R.mipmap.gif_shop).listener(new RequestListener<GifDrawable>() {
@Override
public boolean onLoadFailed(GlideException e, Object model, Target<GifDrawable> target, boolean isFirstResource) {
return false;
}

        @Override
        public boolean onResourceReady(GifDrawable resource, Object model, Target<GifDrawable> target, DataSource dataSource, boolean isFirstResource) {
            try {
                Field gifStateField = GifDrawable.class.getDeclaredField("state");
                gifStateField.setAccessible(true);
                Class gifStateClass = Class.forName("com.bumptech.glide.load.resource.gif.GifDrawable$GifState");
                Field gifFrameLoaderField = gifStateClass.getDeclaredField("frameLoader");
                gifFrameLoaderField.setAccessible(true);
                Class gifFrameLoaderClass = Class.forName("com.bumptech.glide.load.resource.gif.GifFrameLoader");
                Field gifDecoderField = gifFrameLoaderClass.getDeclaredField("gifDecoder");
                gifDecoderField.setAccessible(true);
                Class gifDecoderClass = Class.forName("com.bumptech.glide.gifdecoder.GifDecoder");
                Object gifDecoder = gifDecoderField.get(gifFrameLoaderField.get(gifStateField.get(resource)));
                Method getDelayMethod = gifDecoderClass.getDeclaredMethod("getDelay", int.class);
                getDelayMethod.setAccessible(true);
                //设置只播放一次
                resource.setLoopCount(1);
                //获得总帧数
                int count = resource.getFrameCount();
                int delay = 0;
                for (int i = 0; i < count; i++) {
                    //计算每一帧所需要的时间进行累加
                    delay += (int) getDelayMethod.invoke(gifDecoder, i);
                }
                ivGif.postDelayed(new Runnable() {
                    @Override
                    public void run() {

//这里可以做你想做的完成的任何操作
ivGif.setVisibility(View.GONE);
}
}, delay);
} catch (NoSuchFieldException e) {
e.printStackTrace();
}catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return false;
}
}).into(ivGif);

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容