android异步更新UI
android下面图片更新是需要启动多个子线程来进行的,而android下面是并不是线程安全的,所以thread这里是用不了的,只能用runnable接口。
废话不多说了 直接上代码。
1、下载线程 继承runnable接口
public class DownloadImage implements Runnable {
private ImageView imageView;
private String imageUrl;
private Bitmap bitmap;
//构造的时候传入要更新的ImageView ,同时传入图片的URL
public DownloadImage(ImageView imageView, String imageUrl) {
super();
this.imageView = imageView;
this.imageUrl = imageUrl;
}
public Handler handler = new Handler();
Runnable updateResults = new Runnable() {
@Override
public void run() {
updateUI();
}
};
public void run() {
HttpGet httpRequest = null;
URL url;
try {
url = new URL(imageUrl);
httpRequest = new HttpGet(url.toURI());
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = (HttpResponse) httpclient
.execute(httpRequest);
HttpEntity entity = response.getEntity();
BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity);
InputStream instream = bufHttpEntity.getContent();
bitmap = BitmapFactory.decodeStream(instream);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
handler.post(updateResults);
}
public void updateUI(){
imageView.setImageBitmap(bitmap);
}
}
2、主程序
ImageView imageView = (ImageView)findViewById(R.id.image);
String imageUrl = "http://www.qqzhi.com/show/UploadPic/2010-5/2010521102357899.jpg";
new Thread(new DownloadImage(imageView, imageUrl)).start();
这些添加在oncreate()里面就实现了图片的更新了
3、配置文件AndroidManifest
<uses-permission android:name="android.permission.INTERNET"/>
获取访问网络权限
4、布局文件
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_x = "100px"
android:layout_y = "100px"
android:src=\'#\'" /icon"
/>
OK,要实现的功能就完全实现了,你可以定义N个变量(就是你需要更新的图片),目前我测试一次更新20幅消耗时间1s。
希望能对大家有所帮助,有兴趣可以一起讨论!
更多相关文章
- Android异步更新UI-线程池-Future-Handler实例分析
- android中从图库中选取图片
- Android jni系统变量、函数、接口定义汇总
- Android 页面惯性回弹效果,Nested接口接口简单实现。
- Android使用libjpeg实现图片压缩
- Android 进程和线程模型
- Android Handler 线程消息机制
- android访问网络,下载图片,并设置UI
- Android Retrofit与Spring后台配合,实现单张、多张图片上传功能