安卓控件使用系列17:ImageView获取网络图片

来源:互联网 发布:欧迪臣bit one软件 编辑:程序博客网 时间:2024/06/09 14:31

安卓使用ImageView控件获取网络图片是我们在开发应用程序中常常用到的一个功能,我们来分享一下是怎么实现这一功能的。

这个例子是点击Button按钮,就会按照制定url地址找到图片的位置,并下载绑定到对应的ImageView控件上。

整体思路:在xml文件中定义一个Button控件和一个ImageView控件,然后在活动中的Button控件的OnClick事件中开启一个线程,这个线程会调用获取网络图片的方法,在获取网络图片的方法中,使用图片工厂得到图片的路径返回一个位图对象,把这个位图对象作为一个消息的内容来传递,在handler中接收到这个消息的内容并绑定为ImageView的图片,其中获取网络数据的方式为GET方式,以读入流的形式进行。

activity_main.xml文件:

         <Button          android:id="@+id/button"         android:layout_height="wrap_content"         android:layout_width="fill_parent"         android:text="获取网络图片"         />         <ImageView          android:id="@+id/imageview"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         />
MainActivity.java文件:

private ImageView getImageview;private Button getButton;private final String IMAGE_URL="http://img.hen2.com/201509/source_img/150_G_1442562155435.jpg";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main); getButton = (Button) findViewById(R.id.button); getImageview = (ImageView) findViewById(R.id.imageview); getButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {    new Thread(runa).start();}});}//获取网络图片public void setView(String path) {  String picturepath = path;  byte[] data = null;  try {   data = getImage(picturepath);   Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);// BitmapFactory:图片工厂!   Looper.prepare();// 必须调用此方法,要不然会报错   Message msg = new Message();   msg.what = 0;   msg.obj = bitmap;   handler.sendMessage(msg);  } catch (Exception e) {   Toast.makeText(getApplicationContext(), "获取图片错误", 1).show();  } }//定义一个handler给imageview绑定图片 private Handler handler = new Handler() {  @Override  public void handleMessage(Message msg) {   if (msg.what == 0) {   getImageview.setImageBitmap((Bitmap) msg.obj);   }  } }; //定义一个Runnable,调用获取网络图片的方法 private Runnable runa = new Runnable() {  @Override  public void run() {   setView(IMAGE_URL);  } };  // 获取网络图片的数据 public static byte[] getImage(String picturepath) throws Exception {              URL url = new URL(picturepath);              HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 基于http协议的连接对象              conn.setConnectTimeout(10000);// 10秒(源码有问题,把10(10毫秒)改为了10000(10秒)现在正确了)              conn.setRequestMethod("GET");// 大写             if (conn.getResponseCode() == 200) {               InputStream ins = conn.getInputStream();                return read(ins);               }              return null;         } //流工具  public static byte[] read(InputStream ins) throws Exception {        ByteArrayOutputStream outstream = new ByteArrayOutputStream();        byte[] buffer = new byte[1024];        int length = 0;        while ((length = ins.read(buffer)) > -1) {          outstream.write(buffer, 0, length);        }        outstream.close();       return outstream.toByteArray();    }

0 0
原创粉丝点击