检查动画是否完成Glide Android

问题描述 投票:0回答:2

我正在使用下面的监听器代码

 .listener(new RequestListener<Drawable>() {
                @Override
                public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                    return false;
                }

                @Override
                public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                    GifDrawable gifDrawable = null;
                    Handler handler = new Handler();
                    if (resource instanceof GifDrawable) {
                        gifDrawable = (GifDrawable) resource;

                        int duration = 0;
                        GifDecoder decoder = gifDrawable.getDecoder();
                        for (int i = 0; i < gifDrawable.getFrameCount(); i++) {
                            duration += decoder.getDelay(i);
                        }

                        handler.postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                Intent intent = new Intent(SplashScreenActivity.this, MainActivity.class);
                                startActivity(intent);
                                SplashScreenActivity.this.finish();
                            }
                        }, (duration + 3000));

                    }

                    return false;
                }
            })

这里我无法访问 getDecoder() 处

 GifDecoder decoder = gifDrawable.getDecoder();

如何检查动画是否完成。为什么这里无法访问 getDecoder 我正在使用下面的滑行依赖项

implementation 'com.github.bumptech.glide:glide:4.7.1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1'

提前致谢

android android-glide
2个回答
0
投票
Glide.with(context) // replace with 'this' if it's in activity
        .load(url)
        .into(new DrawableImageViewTarget(memeBackground) {
            public void onResourceReady(Drawable resource, @Nullable Transition<? super Drawable> transition) {
                if (resource instanceof GifDrawable) {
                    ((GifDrawable) resource).registerAnimationCallback(new Animatable2Compat.AnimationCallback() {
                        @Override
                        public void onAnimationEnd(Drawable drawable) {
                            super.onAnimationEnd(drawable);
                            log.D("animation is completed");
                        }
                    });
                    super.onResourceReady(resource, transition);
                }}});

0
投票

使用科特林

override fun onResourceReady(
     resource: GifDrawable?,
     model: Any?,
     target: Target<GifDrawable>?,
     dataSource: DataSource?,
     isFirstResource: Boolean
): Boolean {
    if (target is GifDrawable) {
       target.registerAnimationCallback(object : Animatable2Compat.AnimationCallback() {
           override fun onAnimationEnd(drawable: Drawable) {
               super.onAnimationEnd(drawable)
           }
       })
    }

    return false
} 
© www.soinside.com 2019 - 2024. All rights reserved.