Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 滑翔4:获得可天赋的天赋_Java_Android_Android Image_Android Glide_Image Loading - Fatal编程技术网

Java 滑翔4:获得可天赋的天赋

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

我希望将我的应用程序从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=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中不再公开。你的回答没有解释如何访问解码器。那太恶心了。。。但这是唯一有效的答案,所以你赢得了赏金:)