Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.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
Android 如何在我的应用程序中使用Glide加载图像?_Android_Android Glide - Fatal编程技术网

Android 如何在我的应用程序中使用Glide加载图像?

Android 如何在我的应用程序中使用Glide加载图像?,android,android-glide,Android,Android Glide,我开始使用Glide在android应用程序中加载图像,但我有一些关于它如何工作以及如何加载图像的问题,希望你能解释一下 1.-例如,我有一个6行2列的网格视图,但只有3行可见,直到滚动,Glide加载所有图像,即使它们在屏幕上不可见?或者它加载图像直到用户看到图像视图为止 2.-如果在启动时加载所有图像,我如何使滑动加载图像仅在用户可见时才加载?因为我有一个包含30个图像的json,但如果用户不滚动查看更多图像,我不希望用户花费大量数据来加载图像 我使用以下代码加载网格的每个图像: publi

我开始使用Glide在android应用程序中加载图像,但我有一些关于它如何工作以及如何加载图像的问题,希望你能解释一下

1.-例如,我有一个6行2列的网格视图,但只有3行可见,直到滚动,Glide加载所有图像,即使它们在屏幕上不可见?或者它加载图像直到用户看到图像视图为止

2.-如果在启动时加载所有图像,我如何使滑动加载图像仅在用户可见时才加载?因为我有一个包含30个图像的json,但如果用户不滚动查看更多图像,我不希望用户花费大量数据来加载图像

我使用以下代码加载网格的每个图像:

public void onBindViewHolder(MyViewHolder holder, int position) {
        GalleryPhotoObject image = images.get(position);

        if (!Strings.isNullOrEmpty(image.getImage())) {
            RequestOptions requestOptions = new RequestOptions();
            requestOptions.diskCacheStrategy(DiskCacheStrategy.AUTOMATIC);
            Glide.with(context).load(Constants.BASE_URL + image.getImage())
                    .error(Glide.with(context).load(Constants.BASE_URL + image.getImage()))
                    .thumbnail(0.5f)
                    .apply(requestOptions)
                    .into(holder.thumbnail);
        }
    }

在这种情况下,Glide与它应该加载多少无关。这取决于您的实现。您在
onBindViewHolder
中设置加载滑动的方式意味着每次绑定新的
视图
时,或者换句话说,当
视图
出现在屏幕上时,都会加载图像

此外,Glide还有一个内部缓存,因此它不会加载缓存中已有的图像

但需要注意的是,
onBindViewHolder
不仅用于当前屏幕上的图像,而且也用于当前显示图像正上方或下方的图像。这是为了准备进入的滚动,这样用户就不会看到空视图

在您的上下文中,假设您有3个可见行,那么可能会为这3行调用
onBindViewHolder
,也可能为第4行和第5行调用,这是预期的行为


tldr:您的实现现在很好,可以避免额外和低效地加载图像。在这种情况下,Glide与应该加载多少图像无关。这取决于您的实现。您在
onBindViewHolder
中设置加载滑动的方式意味着每次绑定新的
视图
时,或者换句话说,当
视图
出现在屏幕上时,都会加载图像

此外,Glide还有一个内部缓存,因此它不会加载缓存中已有的图像

但需要注意的是,
onBindViewHolder
不仅用于当前屏幕上的图像,而且也用于当前显示图像正上方或下方的图像。这是为了准备进入的滚动,这样用户就不会看到空视图

在您的上下文中,假设您有3个可见行,那么可能会为这3行调用
onBindViewHolder
,也可能为第4行和第5行调用,这是预期的行为


tldr:您的实现现在很好,可以避免额外和低效地加载图像

Glide在您调用时准确地加载图像

 Glide.with(context).load(resource)
并获取传入图像的宽度和高度

.into(imageview)
用于将具有该宽度和高度的图像缓存到本地存储中

RecyclerViews顾名思义,重用或回收项目视图。因此,即使您不需要加载任何图像,也应该调用

 Glide.with(context).clear(imageview) 

在您的绑定中,当不应加载任何图像时,旧项目图像将停止显示在新项目上。

Glide将在您调用时准确加载图像

 Glide.with(context).load(resource)
并获取传入图像的宽度和高度

.into(imageview)
用于将具有该宽度和高度的图像缓存到本地存储中

RecyclerViews顾名思义,重用或回收项目视图。因此,即使您不需要加载任何图像,也应该调用

 Glide.with(context).clear(imageview) 

在您的绑定中,当不应加载图像时,旧项目图像将停止显示在新项目上。

感谢您的简单解释,我将在代码上实现清除。感谢您的简单解释,我将在代码上实现清除。感谢您解释onBindViewHolder的工作原理,我不知道谢谢你解释onBindViewHolder是如何工作的,我不知道