http://www.smzdwan.com/news/4642.html
最近玩Android时候发现图片下载并用imageview 显示是一个比较麻烦的事情,每次都要去handle 实现以下界面刷新部分,又要在别的地方实现异步的下载任务,要是能直接setimage(“http//:xxx.xxx.xxx”)这样设置就好了 于是就继承了Imageview 然后实现以下代码
public class myImageView extends ImageView {
public Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
if(msg.what == 0){
setImageBitmap((Bitmap)msg.obj);
}
}
};
public myImageView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public myImageView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public myImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void InitMyImageView(){
}
public void SetImageForHttp(final String UrlPath){
if(UrlPath ==null || UrlPath.length()<1)return;
new Thread() {
public void run() {
Bitmap btm = getHttpBitmap(UrlPath);
Message msg = new Message();
msg.what = 0;
msg.obj = btm;
mHandler.sendMessage(msg);
};
}.start();
}
public Bitmap getHttpBitmap(String url){
URL myFileURL;
Bitmap bitmap=null;
try{
myFileURL = new URL(url);
//获得连接
HttpURLConnection conn=(HttpURLConnection)myFileURL.openConnection();
//设置超时时间为6000毫秒,conn.setConnectionTiem(0);表示没有时间限制
conn.setConnectTimeout(6000);
//连接设置获得数据流
conn.setDoInput(true);
//不使用缓存
conn.setUseCaches(false);
//这句可有可无,没有影响
//conn.connect();
//得到数据流
InputStream is = conn.getInputStream();
//解析得到图片
bitmap = BitmapFactory.decodeStream(is);
//关闭数据流
is.close();
}catch(Exception e){
e.printStackTrace();
}
return bitmap;
}
}
//当然请自己添加网络访问权限,以及一下安全性的判断我就不贴了
下面贴一下使用方法
public class MainActivity extends ActionBarActivity {
public LinearLayout linearLayout ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
linearLayout = (LinearLayout) findViewById(R.id.self_linear_layoutssss);
myImageView imgview = new myImageView(MainActivity.this);
imgview.setLayoutParams( new LinearLayout.LayoutParams (100,100));
linearLayout.addView(imgview);
imgview.SetImageForHttp("http://img.smzdwan.com/upload/201405/5371c95a66031.jpg");//简单轻松就能搞定了
}
}