处理从URL加载图像

Sha*_*ole 4 android image drawable

我有这个代码从网址中提取图像并在应用程序中显示它.

    Drawable drawableTest = LoadImageFromWeb("http://www.someimageurl");
    imgView.setImageDrawable(drawableTest);

private Drawable LoadImageFromWeb(String url){
    try {
        InputStream is = (InputStream) new URL(url).getContent();
        Drawable d = Drawable.createFromStream(is, "src name");
        return d;
    }catch (Exception e) {
        System.out.println("Exc="+e);
        return null;
    }
 }
Run Code Online (Sandbox Code Playgroud)

该方法有效,图像被拉入应用程序没有问题.我想做的是两件事......

1)将进程移动到后台线程.

2)在下载图像时显示"加载"可绘制(位于可绘制文件夹中),然后在完成后切换到图像.如果有问题我想加载"无法加载图像"drawable(也位于drawable文件夹中).

有人可以帮助修改上面的方法,以便它在后台运行并在加载时显示相应的图像,如果有问题吗?

谢谢!你们摇滚顺便说一句.

香农

Can*_*ner 5

您可以使用AsyncTask另一个线程运行任务.这样,它就不会阻止UI.粗略地说,应该是这样的:

private class MyTask extends AsyncTask<String, Void, Drawable> {

     ProgressDialog pd;

     protected Drawable doInBackground(String... url) {
            try {
                pd = ProgressDialog.show(this, "Working..", "Getting image", true, false);
                InputStream is = (InputStream) new URL(url[0]).getContent();
                Drawable d = Drawable.createFromStream(is, "src name");
                return d;
            } catch (Exception e) {
                System.out.println("Exception = " + e);
                return null;
            }
     }

     protected void onProgressUpdate(Void... progress) {
     }

     protected void onPostExecute(Drawable result) {
         /* Image loaded...*/
         pd.dismiss();
         imgView.setImageDrawable(result);

     }
}

MyTask task = new MyTask();
task.execute("http://www.someimageurl");
Run Code Online (Sandbox Code Playgroud)

您可以随意改变ProgressDialog...