如何加载异步URL图片?(LibGDX)

4
    final Handler downloadHandler =  new Handler() {
        public void handleMessage(Message msg) {
            Log.d("Yoon", "Handler");
            MCImageDisposableView iconView = new MCImageDisposableView(profileSprite, tag);
            iconView.setScale(0.5f);
            iconView.setPosition(17, 145);
            addActor(iconView);
        }
    };

    Thread sb = new Thread(new Runnable() {
        @Override
        public void run() {
            Log.d("Yoon", "Thread");
            profileSprite = BitmapDownloader.downloadSprite(Utils.getImageURL(MyChoiceApp.shared.context, aid));
            downloadHandler.sendEmptyMessage(0);
        }
    });

    sb.start();

如果不使用handler,改变actor(MCImageDisposableView有sprite)的图片。

但是图片不正确。图片没有加载我的url。图片加载了纹理图集。

MCImageDisposableView类具有下载图片功能。如果不使用线程,它可以很好地工作......

如何异步加载图片?


你想在应用程序中实现什么?请告诉我具体的场景。 - AndoAiron
@AndoAiron 我想将演员(url 图像)添加到父演员中。使用主线程(在构造父演员时,添加 url 图像演员)通过 wifi 可以正常工作... 但是通过 3G 很慢。因此,我想在构造父演员后下载并添加 url 图像演员... - ChangUZ
2个回答

1

1

你需要为此实现lazyloading。

阅读下面提到的链接以了解lazyloading:

ListView中图像的延迟加载

以下是执行此操作的基本思路:

addActor(){
   //if you need to download image from url
   downloadImageFromUrl(actorImageView, url);
}

downloadIamgeFromUrl(ImageView actorImageView, String url){
    //ToDo : create Thread to download image from server
    //ToDo : Once done, set this image to actorImageView  in UI thread as
    //runOnUiThread(new Runnable() {
        @Override
        public void run() {
            actorImageView  .setImageBitmap(bitmap);
        }
    });
}

它不起作用!正如@ChangUZ所说,如果在后台线程中使用加载,则图像不正确。 - Nolesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接