安卓控件使用系列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
- 安卓控件使用系列17:ImageView获取网络图片
- 安卓Imageview控件如何获取网络图片
- 安卓imageview获取网络图片
- 安卓控件使用系列15:ImageView适屏和裁剪图片
- 安卓控件使用系列16:ImageView实现图片缩放和旋转
- 安卓控件使用系列14:ImageView的基本使用方法
- 安卓基础之imageview控件的使用+图片浏览
- ImageView获取网络图片
- ImageView获取网络图片
- 安卓开发中如何获取网络图片并设置到ImageView?
- ImageView 使用网络图片
- 安卓常用控件3之图片框(ImageView)
- Android中使用ImageView控件显示网络图片
- 安卓 imageview资源图片ID获取方法
- 安卓 imageview资源图片ID获取方法
- ImageView使用网络图片资源
- 安卓控件使用系列26:ImageSwitcher图片切换控件的使用方法
- 获取一张网络图片(安卓)
- 文章标题
- 从面向过程到面向对象
- Python学习笔记<文件操作>
- nsbundle的一些获取本地信息
- 记录一个实用的可以进行网站分析的网站netcraft
- 安卓控件使用系列17:ImageView获取网络图片
- Ubuntu 虚拟机网络问题
- 如何启用/开启本机的IIS服务
- MySQL主从Replication同步&&半同步&&主主复制架构
- ubuntu下安装shadowsocks
- effective c++ 以对象管理资源
- Mybatis系列(八)集合映射
- K-means算法
- 多线程