使用Glide加载完成GIF后打开活动

时间:2016-10-20 10:11:24

标签: android android-glide

我正在使用Glide在启动画面中加载GIF图像。 完成GIF加载后,我想使用Intent打开下一个活动。

我尝试了下面的代码,

Glide.with(this).load(R.drawable.image1).override(width, height).into(imageViewTarget);

和滑翔版:com.github.bumptech.glide:滑翔:3.7.0'

但是无法找到任何帮助,请帮助解决这个问题。

3 个答案:

答案 0 :(得分:1)

让listner来处理这个..

     Glide.with(this)
    .load(R.drawable.image1)
    .asGif()
    .override(width, height)
                 .listener(new RequestListener<String, GlideDrawable>() {
                                    @Override
                                    public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
                                        return false;
                                    }

                                    @Override
                                    public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
                                       //AFTER LOAD OUT YOUR LOGIC
                                      //open next activity
                                        return false;
                                    }
                                })
     .into(imageViewTarget);

并确保您的imageview始终可见。 希望这会有所帮助..

答案 1 :(得分:1)

从我的角度来看,你想要的是当 GIF动画完成而不是gif加载到你的ImageView时开始另一个活动。 在这种情况下,您可以更好地衡量完成gif动画所需的时间并使其成为局部变量。为了确保gif动画完整,最好将时间设为a比动画费用长一点。 然后就这样做。

long gifAnimationTime = 1000;// A bit more than the gif animation,you can ajust this to your situation.
Glide.with(this)
        .load(R.drawable.image1)
        .listener(new RequestListener<String, GlideDrawable>() {
            @Override
            public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
                return false;
            }

            @Override
            public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
                new Timer().schedule(new TimerTask() {
                    @Override
                    public void run() {
                        // start your activity here.
                    }
                }, gifAnimationTime);
                return false;
            }
        })
        .into(imageViewTarget);    

我有了新的东西。试试这个:

    Movie movie = Movie.decodeByteArray(gifdata,offset,length);
    long period = movie.duration();

答案 2 :(得分:1)

仅花了几个小时,试图为Glide V4找到解决方案,这是我最终遇到的,并且效果很好。 https://github.com/bumptech/glide/pull/3438

        @Override
        public boolean onResourceReady(GifDrawable resource, Object model, Target<GifDrawable> target, DataSource dataSource, boolean isFirstResource) {
            resource.setLoopCount(1);
            resource.registerAnimationCallback(new Animatable2Compat.AnimationCallback() {
                @Override
                public void onAnimationEnd(Drawable drawable) {
                    //in your case start new Activity
                }
            });
            return false;
        }
    }).into(imageView);