首页 > 移动平台 > 详细

Android动态加载网络图片

时间:2020-04-16 17:53:22      阅读:90      评论:0      收藏:0      [点我收藏+]

动态加载网络图片

和 WebView 一样,加载网络图片也需要网络访问权限:

<uses-permission android:name="android.permission.INTERNET" />

载入图片的原理:根据图片地址获取图片,并将图片由文件流转换为位图对象。
载入图片的过程必须进行异步处理,否则就很容易出现程序无响应(Application Not Responding)的情况。
创建一个 LoadImagesTask 类,继承自 AsyncTask:

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.widget.ImageView;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class LoadImagesTask extends AsyncTask<String, Void, Bitmap> {
    private ImageView imageView;

    public LoadImagesTask(ImageView imageView) {
        this.imageView = imageView;
    }

    @Override
    protected Bitmap doInBackground(String... params) {
        URL imageUrl = null;
        Bitmap bitmap = null;
        InputStream inputStream = null;
        try {
            imageUrl = new URL(params[0]);
            HttpURLConnection conn = (HttpURLConnection) imageUrl.openConnection();
            conn.setDoInput(true);
            conn.connect();
            inputStream = conn.getInputStream();
            bitmap = BitmapFactory.decodeStream(inputStream);
            inputStream.close();

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return bitmap;
    }

    @Override
    protected void onPostExecute(Bitmap bitmap) {
        imageView.setImageBitmap(bitmap);
    }
}

异步处理就是在主线程和子线程进行通信,子线程处理耗时任务,并将结果返回到主线程。AsyncTask 将这个过程进行了包装,这里我就不多解释了。

最后在 MainActivity 中进行测试,代码如下:

public class MainActivity extends AppCompatActivity {
    private ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.web_image);

        String http = "http://img4.duitang.com/uploads/item/" +
                "201403/27/20140327194516_SaKBX.png";
        ImageView imageView = (ImageView) findViewById(R.id.image_view);
        //启动异步任务,加载网络图片
        new LoadImagesTask(imageView).execute(http);
    }
}

 

Android动态加载网络图片

原文:https://www.cnblogs.com/huckleberry/p/12714463.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!