【问题标题】:Stop gif decoding in glide在滑行中停止 gif 解码
【发布时间】:2019-07-20 02:18:35
【问题描述】:

我正在使用 glide 在我的 android 项目中加载 gif。 Glide.with(getActivity()).load(mainDrawable).asGif().into(mainDrawableView);

这会让 gif 不断重复,如何阻止 gif 循环播放?

【问题讨论】:

    标签: android gif android-glide


    【解决方案1】:

    这对我有用。滑翔 V4

    Glide.with(this).asGif().load(/*your gif url*/).listener(new RequestListener<GifDrawable>() {
    @Override
    public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<GifDrawable> target, boolean isFirstResource) {
        return false;
    }
    
    @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) {
                //do whatever after specified number of loops complete
            }
        });
        return false;
    }}).into(imageView);
    

    【讨论】:

      【解决方案2】:

      Github post 有一个解决方案,可以在 onResourceReady() 方法中添加请求侦听器并停止动画。
      但是,这对我不起作用。可能是因为在我的情况下资源是本地的。我最终得到了以下不太糟糕的解决方法:

      使用 Gimp 或 Photoshop 从 Gif 导出静止图像。当您想停止动画时,将静止图像加载到 ImageView 中。当您想显示动画时加载原始 Gif。当然,这种解决方法仅适用于小型和本地文件。

      【讨论】:

        【解决方案3】:

        RequestListener 内 GifDrawable 中的 setLoopCount

        import static com.bumptech.glide.load.resource.gif.GifDrawable.LOOP_INTRINSIC;
        
        Glide.with(context).asGif().listener(getRequest()).load(R.raw.gif_capture).into(imgProgress);
        public RequestListener<GifDrawable> getRequest() {
                return new RequestListener<GifDrawable>() {
                    @Override
                    public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<GifDrawable> target, boolean isFirstResource) {
                        return false;
                    }
        
                    @Override
                    public boolean onResourceReady(GifDrawable resource, Object model, Target<GifDrawable> target, DataSource dataSource, boolean isFirstResource) {
                        resource.setLoopCount(LOOP_INTRINSIC);
        
                        return false;
                    }
                };
            }
        

        【讨论】:

          猜你喜欢
          • 2016-07-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-02
          • 2021-09-22
          • 2015-03-26
          • 1970-01-01
          • 2010-10-21
          相关资源
          最近更新 更多