我正在使用ListView来显示与这些图像相关的一些图像和标题。我正在从互联网上获取图像。是否有一种方法可以延迟加载图像,以便在文本显示时,UI不会被阻止,图像在下载时显示?

图像总数不是固定的。


当前回答

这就是使用Jetpack Compose的方法。

implementation("io.coil-kt:coil-compose:1.3.1") // Add the Coil-Compose library
Image(
    painter = rememberImagePainter("https://www.example.com/image.jpg"),
    contentDescription = "My image description",
    modifier = Modifier.size(128.dp)
)

感谢nglauber和Gabriele Mariotti的回答。

其他回答

我发现滑翔机比毕加索更好。我使用picasso加载了大约32张图片,每张图片的大小约为200-500KB,而且我总是得到OOM。但滑翔机解决了我所有的OOM问题。

我可以推荐一种类似魅力的不同方式:Android Query。

您可以从这里下载JAR文件

AQuery androidAQuery = new AQuery(this);

例如:

androidAQuery.id(YOUR IMAGEVIEW).image(YOUR IMAGE TO LOAD, true, true, getDeviceWidth(), ANY DEFAULT IMAGE YOU WANT TO SHOW);

它非常快速和准确,使用它,您可以找到更多的功能,如加载时的动画、获取位图(如果需要)等。

URLImageViewHelper是一个非常棒的库,可以帮助您做到这一点。

一些答案已经提到了使用各种图像库,如通用图像加载器和androidimageloader等。这是一个老问题,但对于仍在寻找类似内容的人来说,有几个这样的库用于图像加载/缓存。

嗯,从互联网加载图像有很多解决方案。您也可以使用Android Query库。它将为您提供所有必需的活动。确保您想做什么,并阅读库wiki页面。并解决了图像加载限制。

这是我的代码:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;
    if (v == null) {
        LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = vi.inflate(R.layout.row, null);
    }

    ImageView imageview = (ImageView) v.findViewById(R.id.icon);
    AQuery aq = new AQuery(convertView);

    String imageUrl = "http://www.vikispot.com/z/images/vikispot/android-w.png";

    aq.id(imageview).progress(this).image(imageUrl, true, true, 0, 0, new BitmapAjaxCallback() {
        @Override
        public void callback(String url, ImageView iv, Bitmap bm, AjaxStatus status) {
            iv.setImageBitmap(bm);
        }
    ));

    return v;
}

它应该可以解决您的延迟加载问题。