利用AsyncTast实现图片下载
2016-06-04 11:27
369 查看
创建WebImageView的ImageView的子类,这个类可以从远程资源延时加载图片
public class WebImageView extends ImageView{
private Drawable mplaceholder,mImage;
public WebImageView(Context context){
this(context,null);
}
public WebImageView(Context context,AttributeSet attrs){
this(context,attrs,0);
}
public WebImage(Context context,AttributSet attrs,int defaultStyle){
super(context,attrs,defaultStyle);
}
public void setPlaceholderImage(Drawable drawable){
mplacehoder = drawable;
if(mImage==null)
setImageDrawable(mplaceholder);
}
public void setPlaceholderImage(int resid){
mplacehoder = getResource().getDrawable(resid);
if(mImage==null)
setImageDrawable(mplacehodler);
}
public void setImageUrl(String url){
DownloadTask task = new DownloadTask();
task.execute(url);
}
private class DownloadTask extends AsyncTask<String,Void,Bitmap>{
protected Bitmap doInBackground(String ...params){
String url = params[0];
try{
URLConnection connection = (new URL(url)).openConnection();
InputStream is = connection.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
ByteArrayBuffer baf = new ByteArrayBuffer(50);
int current =0;
while((current = bis.read())!=-1){
baf.append((byte)current);
}
byte[] imageData = baf.toByteArray();
return BitmapFactory.decodeByteArray(imageData,0,imgeData.length);
}catch(Exception e){
}
}
protect void onPostExecute(Bitmap result){
mImage = new BitmapDrawable(result);
if(mImage!=null)
setImageDrawable(mImage);
}
}
}
AsyncTask的3个参数(输入参数,进度值,运行结果)是强类型,在这里任务输入参数是String运行结果是Bitmap没有用的中间进度值所有为Void在扩展AsyncTask是只需要实现一个doInBackground()方法,改方法定义了需要在后台线程运行的工作。
AsyncTask中定义的其他回调方法有onPreExecute(),onPostExecute()和onProgressUpdate(),它们用于在主线程中更新用户界面
public class WebImageView extends ImageView{
private Drawable mplaceholder,mImage;
public WebImageView(Context context){
this(context,null);
}
public WebImageView(Context context,AttributeSet attrs){
this(context,attrs,0);
}
public WebImage(Context context,AttributSet attrs,int defaultStyle){
super(context,attrs,defaultStyle);
}
public void setPlaceholderImage(Drawable drawable){
mplacehoder = drawable;
if(mImage==null)
setImageDrawable(mplaceholder);
}
public void setPlaceholderImage(int resid){
mplacehoder = getResource().getDrawable(resid);
if(mImage==null)
setImageDrawable(mplacehodler);
}
public void setImageUrl(String url){
DownloadTask task = new DownloadTask();
task.execute(url);
}
private class DownloadTask extends AsyncTask<String,Void,Bitmap>{
protected Bitmap doInBackground(String ...params){
String url = params[0];
try{
URLConnection connection = (new URL(url)).openConnection();
InputStream is = connection.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
ByteArrayBuffer baf = new ByteArrayBuffer(50);
int current =0;
while((current = bis.read())!=-1){
baf.append((byte)current);
}
byte[] imageData = baf.toByteArray();
return BitmapFactory.decodeByteArray(imageData,0,imgeData.length);
}catch(Exception e){
}
}
protect void onPostExecute(Bitmap result){
mImage = new BitmapDrawable(result);
if(mImage!=null)
setImageDrawable(mImage);
}
}
}
AsyncTask的3个参数(输入参数,进度值,运行结果)是强类型,在这里任务输入参数是String运行结果是Bitmap没有用的中间进度值所有为Void在扩展AsyncTask是只需要实现一个doInBackground()方法,改方法定义了需要在后台线程运行的工作。
AsyncTask中定义的其他回调方法有onPreExecute(),onPostExecute()和onProgressUpdate(),它们用于在主线程中更新用户界面
相关文章推荐
- Android打造带透明圆弧的ImageView
- 按右键另存图片只能存BMP
- photoshop去除图片上的水印
- upload上传单张图片
- 图片引发的溢出危机(图)
- C#实现把彩色图片灰度化代码分享
- C#将图片和字节流互相转换并显示到页面上
- C#监控文件夹并自动给图片文件打水印的方法
- 纯CSS实现的当鼠标移上图片添加阴影效果代码
- 如何使用C#从word文档中提取图片
- C#实现打开画图的同时载入图片、最大化显示画图窗体的方法
- C#图片添加水印的实现代码
- 随鼠标移动的图片或文字特效代码
- CSS 图片横向排列实现代码
- C#实现将Email地址转成图片显示的方法
- C#实现图片加相框的方法
- 超级经典一套鼠标控制左右滚动图片带自动翻滚
- 用css实现图片垂直居中的使用技巧
- Android编程UI设计之GridView和ImageView的用法
- 一起动手编写Android图片加载框架