Java 滑翔4:获得可天赋的天赋
我希望将我的应用程序从Glide v3升级到Glide v4。我需要知道通过滑动加载的Java 滑翔4:获得可天赋的天赋,java,android,android-image,android-glide,image-loading,Java,Android,Android Image,Android Glide,Image Loading,我希望将我的应用程序从Glide v3升级到Glide v4。我需要知道通过滑动加载的gif循环有多长 v3代码: int duration = 0; GifDecoder decoder = gifDrawable.getDecoder(); for (int i = 0; i < gifDrawable.getFrameCount(); i++) { duration += decoder.getDelay(i); } int duration=0; GifDecoder=g
gif
循环有多长
v3代码:
int duration = 0;
GifDecoder decoder = gifDrawable.getDecoder();
for (int i = 0; i < gifDrawable.getFrameCount(); i++) {
duration += decoder.getDelay(i);
}
int duration=0;
GifDecoder=gifDrawable.getDecoder();
对于(int i=0;i
看起来Glide v4不再显示
解码器
。在没有它的情况下,我如何进行计算,或者我现在如何获得解码器 请查看下面的链接,希望这有帮助:
请添加以下依赖项:
dependencies {
implementation 'com.github.bumptech.glide:glide:4.4.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.4.0'
}
在上面的Gradle文件中,解码器文件就在那里,并执行您的操作。这里有一种使用反射获取解码器的方法:
Class gifStateClass = Class.forName("com.bumptech.glide.load.resource.gif.GifDrawable$GifState");
Field frameLoaderField = gifStateClass.getDeclaredField("frameLoader");
frameLoaderField.setAccessible(true);
Object frameLoader = frameLoaderField.get(gifDrawable.getConstantState());
Class frameLoaderClass = Class.forName("com.bumptech.glide.load.resource.gif.GifFrameLoader");
Field gifDecoderField = frameLoaderClass.getDeclaredField("gifDecoder");
gifDecoderField.setAccessible(true);
GifDecoder gifDecoder = (GifDecoder) gifDecoderField.get(frameLoader);
int duration = 0;
for (int i = 0; i < gifDrawable.getFrameCount(); i++) {
duration += gifDecoder.getDelay(i);
}
Class-gifStateClass=Class.forName(“com.bumptech.glide.load.resource.gif.gifdravable$GifState”);
Field frameLoaderField=gifStateClass.getDeclaredField(“frameLoader”);
frameLoaderField.setAccessible(true);
对象frameLoader=frameLoaderField.get(gifDrawable.getConstantState());
类frameLoaderClass=Class.forName(“com.bumptech.glide.load.resource.gif.GifFrameLoader”);
字段gifdecorderfield=frameLoaderClass.getDeclaredField(“gifdecorder”);
gifDecoderField.setAccessible(true);
gifdecorder gifdecorder=(gifdecorder)gifdecorderfield.get(frameLoader);
int持续时间=0;
对于(int i=0;i
只要API可能发生变化,这应该而不是被视为稳定/可靠的解决方案。不过,要迅速解决这个问题,这肯定会奏效
我可以看到一个合适的,会在事情发生变化时立即更新答案。如果我理解正确,你的意思是说没有
gifdecader
和Glide v4
对吗?如果是,则是错误的信息;你仍然可以使用解码器,这一点没有变化@迪帕利斯。虽然还有一个gif解码器
,但它不再通过glidev4api
公开。这意味着我无法访问对象以获取帧信息。Glide()内部使用了gif解码器的一个实现。它曾经在v3中公开,但在v4中不再公开。你的回答没有解释如何访问解码器。那太恶心了。。。但这是唯一有效的答案,所以你赢得了赏金:)