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();
}
}