Glide使用总结

Glide.with(fragment).load((chat.getMedia().getFilename()))
.bitmapTransform(new CenterCrop(mActivity), new MaskTransformation(mActivity, resId))
.override(size.getWidth(), size.getHeight())
.placeholder(R.drawable.ic_article_image_defalut).into(holder.mImage);
MaskTransformation() 必须要override() 否则会出现意想不到的结果

Glide同步下载文件(优先从缓存加载)

File file = Glide.with(activity).load(url).downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL).get();

Glide同步下载bitmap(每次都会解码为bitmap效率低)

Bitmap theBitmap = Glide.with(SomeActivity.this).load(url).asBitmap().into(-1,-1).get();

Glide与RxJava结合下载文件

public void downLoadFile(final Activity activity, final String url){
                Subscription subscribe = Observable
                        .create(new Observable.OnSubscribe<File>() {
                            @Override
                            public void call(Subscriber<? super File> subscriber) {
                                try {
                                    // 如果是下载原图那么可以使用
                                    // Bitmap  bitmap = Glide.with(context).load(url).downloadOnly(Target.SIZE_ORIGINAL,Target.SIZE_ORIGINAL).get()
                                    // 如果是下载原图文件那么可以使用
                                    // 这个是关键代码
                                    File file = Glide.with(activity).load(url).downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL).get();
                                    subscriber.onNext(file);
                                    subscriber.onCompleted();
                                } catch (InterruptedException | ExecutionException e) {
                                    subscriber.onError(e);
                                }
                            }
                        })
                        .subscribeOn(Schedulers.io())
                        .map(new Func1<File, File>() {
                            @Override
                            public File call(File file) {
                                File dest = AndroidUtils.getTmpFile(getDstDir("image/"), null);
                                try {
                                    FileUtils.copyFile(file, dest);
                                    return dest;
                                } catch (IOException e) {
                                    throw OnErrorThrowable.from(e);
                                }
                            }
                        })
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribe(new Observer<File>() {
                            @Override
                            public void onNext(File file) {
                                Toost.message("该图片已被保持至" + file.getPath());
                            }

                            @Override
                            public void onCompleted() {
                            }

                            @Override
                            public void onError(Throwable e) {
                                Toost.message("保存图片失败,请检查网络连接是否正常!");
                            }
                        });
}

Glide带进度的文件下载

public void downLoadFile(final Activity activity, final String url)
SimpleTarget<File> simpleTarget = new SimpleTarget<File>() {
            @Override
            public void onResourceReady(File resource, GlideAnimation<? super File> glideAnimation) {
                mVideoPlayerManager.playNewVideo(null, mVideoView, resource.getAbsolutePath());
            }
        };
        ProgressTarget<String, File> trget = new ProgressTarget<String, File>(url, simpleTarget) {
            int preProgress = 0;

            @Override
            protected void onConnecting() {

            }

            @Override
            protected void onDownloading(long bytesRead, long expectedLength) {
                int progress = (int) (((double) bytesRead / (double) expectedLength) * 100);
                if (progress != preProgress) {
                    preProgress = progress;
                    mVideoLoding.setProgress(progress);
                }
            }

            @Override
            protected void onDownloaded() {

            }

            @Override
            protected void onDelivered() {

            }
        };
        Glide.with(getActivity()).load(url).downloadOnly(trget);
        }

Glide带进度的图片加载

public void ddd(){
 Glide.with(this).load(lUrl).asBitmap().placeholder(R.drawable.user_icon_default).fitCenter().listener(new RequestListener<String, Bitmap>() {
                @Override
                public boolean onException(Exception e, String model, Target<Bitmap> target, boolean isFirstResource) {
                    if (spinner != null && getActivity() != null) {
                        spinner.startAnimation(AnimationUtils.loadAnimation(getActivity(), R.anim.abc_fade_out));
                        spinner.setVisibility(View.INVISIBLE);
                        Toost.message("获取图片失败");
                    }
                    return false;
                }

                @Override
                public boolean onResourceReady(Bitmap resource, String model, Target<Bitmap> target, boolean isFromMemoryCache, boolean isFirstResource) {
                    if (spinner != null && getActivity() != null) {
                        spinner.startAnimation(AnimationUtils.loadAnimation(getActivity(), R.anim.abc_fade_out));
                        spinner.setVisibility(View.INVISIBLE);
                    }
                    backView.setVisibility(View.INVISIBLE);
                    return false;
                }
            }).into(new ProgressTarget<String, Bitmap>(lUrl, new BitmapImageViewTarget(photoView)) {
                @Override
                protected void onConnecting() {

                }

                @Override
                protected void onDownloading(long bytesRead, long expectedLength) {
                    int progress = (int) (((double) bytesRead / (double) expectedLength) * 100);
                    if (spinner != null && getActivity() != null) {
                        spinner.setProgress(progress);
                    }
                }

                @Override
                protected void onDownloaded() {

                }

                @Override
                protected void onDelivered() {

                }
            });
}
### 回答1: 是的,Glide 的 `downloadOnly()` 方法已经被标记为过时。如果要下载图片而不显示它,可以使用 `download()` 方法。`download()` 方法与 `downloadOnly()` 方法的区别在于,前者会在下载完成后将图片保存到磁盘缓存中,而后者不会。 下面是使用 Glide 下载图片的示例代码: ```java Glide.with(context) .load(imageUrl) .download(new SimpleTarget<File>() { @Override public void onResourceReady(File resource, GlideAnimation<? super File> glideAnimation) { // 下载完成,resource 为保存在磁盘缓存中的文件 } }); ``` 在这个示例中,我们通过 `load()` 方法加载图片,并通过 `download()` 方法下载并保存图片。`download()` 方法的参数是一个 `SimpleTarget<File>` 对象,用于在下载完成后回调,`onResourceReady()` 方法中的 `resource` 参数即为保存在磁盘缓存中的文件。 需要注意的是,如果要使用 `download()` 方法下载图片,必须在 AndroidManifest.xml 文件中声明写入外部存储的权限: ```xml <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> ``` ### 回答2: GlidedownloadOnly()方法是用来在后台下载图片,并且不会将图片直接加载到ImageView上。然而,由于一些更新和改进,该方法已经被标记为过时。在最新版本的Glide中,使用downloadOnly()方法并不推荐,应该尽量避免使用它。 过时的原因可能是因为下载图片时,Glide提供了更多的选择和更好的性能。例如,Glide已经引入了RequestOptions类,它提供了更多的选项去控制图片下载的行为和结果。可以通过在RequestOptions中设置diskCacheStrategy()方法来指定磁盘缓存策略,这样可以更好地管理已下载的图片缓存。 另外,Glide中的新方法也提供了更好的错误处理机制。过时的downloadOnly()方法无法提供可靠的错误处理,而新的方法可以更好地处理加载过程中的异常和错误情况。 因此,建议使用新的方法来替代过时的downloadOnly()。例如,可以使用Glide的asFile()方法来直接下载图片文件,并使用diskCacheStrategy()来设置缓存策略。或者也可以使用Glide的preload()方法来预加载图片,为后续的加载操作做准备。 总之,尽量避免使用过时的downloadOnly()方法,而是使用新的方法来更好地管理和处理图片下载过程中的各种情况。 ### 回答3: GlidedownloadOnly方法是用于仅下载图片而不显示的方法,它已经被标记为过时。原因是在实际使用中发现,仅下载图片而不显示可能会导致一些问题。 首先,通过downloadOnly方法下载的图片将不会被缓存。这意味着每次你需要显示这个图片时,都需要重新下载。这不仅会消耗网络流量,还会延长图片加载的时间,并且在网络不稳定的情况下,可能导致图片无法加载成功。 其次,downloadOnly方法没有提供任何回调接口,无法处理下载过程中的异常情况。如果在下载过程中出现网络错误或其他问题,我们将无法得知并进行相应处理。 另外,Glide还提供了一种更加灵活的方式来实现图片下载和加载的功能,即使用into方法。通过into方法,我们可以指定一个用于显示图片的目标View,并在加载完成后得到相应的回调,从而可以更好地处理加载过程中的各种情况。 总结来说,GlidedownloadOnly方法被标记为过时是因为它无法处理缓存以及异常情况,并且有更加灵活的替代方案可供选择。因此,在实际使用中,建议使用更为有效和可靠的方式来进行图片下载和加载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值