原理:定义一个类集成ImageView ,然后开启一个线程去获取网络资源,然后用handler更新UI。
public class MyImageView extends ImageView {
protected static final int SUCCESS = 0;
protected static final int ERROR = 1;
public MySmartImageView(Context context) {
super(context);
}
private Handler mHandler = new Handler(){
public void handleMessage(Message msg) {
switch (msg.what) {
case SUCCESS:
Bitmap bitmap = (Bitmap) msg.obj;
// siv.setI(bitmap);
break;
case ERROR:
// Toast.makeText(context, text, duration).sho
break;
default:
break;
}
};
};
//获取网络资源。
public void setImageUrl(final String ul){
new Thread(){
public void run() {
try {
URL url = new URL(ul);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setRequestMethod("GET");
int code = conn.getResponseCode();
if(code==200){
InputStream in = conn.getInputStream();
Bitmap bitmap = BitmapFactory.decodeStream(in);
//发送消息,通知handler更细UI
Message msg = Message.obtain();
msg.what=SUCCESS;
msg.obj=bitmap;
mHandler.sendMessage(msg);
}
} catch (Exception e) {
e.printStackTrace();
Message msg = Message.obtain();
msg.what=ERROR;
mHandler.sendMessage(msg);
}
};
}.start();
}
}