在Glide3.0的时候,我们可以通过GifDecoder获取每一帧的播放时长然后相加得到gif的播放时长,即:
GifDrawable drawable = (GifDrawable) glideDrawable;
GifDecoder decoder = drawable.getDecoder();
long duration = 0;
for (int i = 0; i < drawable.getFrameCount(); i++) {
duration += decoder.getDelay(i);
}
然后使用handle 发送一个延时消息,或者其它方法,等gif播放完成以后再做相应操作。
或者,通过重写GifDrawable,重写onStop()方法来处理:
public class MyGifDrawable extends GifDrawable {
public MyGifDrawable (GifDrawable other) {
this(other, other.getFirstFrame(), other.getFrameTransformation());
}
@Override
public void stop() {
super.stop();
//GIF播放完成,可以做一些操作
}
}
但是到Glide4.0, GifDecoder 被声明为private,去掉了getDecoder()方法,第一种方法如果不使用反射,是