SmartImageView的使用
1,將下載好的SmartView源碼拷貝到src下
2,在item_list.xml佈局文件中使用SmartImageView(全類名)
3,在MyAdapter的findView方法中,也是使用smartImageView控件,獲取,添加數據
4,給SmartImageView添加數據
siv.setImageUrl(imageUrl);
爲什麼使用開源的SmartImageView?
因爲ImageView在給控件添加圖片數據的時候,只能通過drawable,或者BitMap來
不能通過圖片地址(數據庫中一般只存圖片地址)
自定義控件SmartImageView
1,創建SmartImageView 繼承 ImageView
2,添加setImageUrl(String path)方法
3,一定要將所有的構造方法重寫(alt+shfit+s + c);
4,因爲SmartImageView是View,屬性主線程可以修改UI
但是網絡請求需要在子線程中實現(將bitmap發送到handler)
使用Handler(在handler中設置setImageBitmap(bitmap))
注意事項
1,自定義控件,一定要重寫所有的構造方法
2,控件可以修改UI,但是網絡請求必須放在子線程中操作
3,在xml佈局文件中,一定要使用全類名
4,佈局文件中,想讓圖片填充滿,使用android:scaleType="fitXY"
代碼部分
public class SmartImageView extends ImageView{
private static final int TIME_OUT = 2000;
private Handler handler = new Handler(){
public void handleMessage(Message msg) {
Bitmap bm = (Bitmap)msg.obj;
SmartImageView.this.setImageBitmap(bm);
};
};
public SmartImageView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public SmartImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SmartImageView(Context context) {
super(context);
}
public void setImageUrl(final String path){
new Thread(){
public void run(){
try {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(TIME_OUT);
conn.setReadTimeout(TIME_OUT);
conn.setRequestMethod("GET");
int code = conn.getResponseCode();
if(code==200){
InputStream is = conn.getInputStream();
Bitmap bm = BitmapFactory.decodeStream(is);
Message msg = Message.obtain();
msg.obj = bm;
handler.sendMessage(msg);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
}