1:加载图片时,用自定义的图片加载器类,如下:
/**
* Created by qizepu on 2017/4/15.
* 创建一个类 继承AsyncTask 用来加载图片 参数类型是String 返回类型是Bitmap
*/
public class LoadImageActivity extends AsyncTask<String,Void,Bitmap> {
//定义一个图片的接口 用于回调
public interface ImageCallBack{
void getBitmap(Bitmap bitmap);
}
//定义变量记住调用者所传递进来的回调监听对象
private ImageCallBack imageCallBack;
//创建构造方法
public LoadImageActivity(ImageCallBack imageCallBack){
this.imageCallBack=imageCallBack;
}
//重写方法
@Override
protected void onPostExecute(Bitmap bitmap) {
super.onPostExecute(bitmap);
//设置图片 回调回去
if (bitmap != null){
imageCallBack.getBitmap(bitmap);
}
}
//加载图片
@Override
protected Bitmap doInBackground(String... params) {
try {
String path = params[0];
URL url = new URL(path);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//设置请求方式,请求时间及服务器响应时间
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
//判断服务器是否连接成功并响应
if (connection.getResponseCode() == 200){
//得到图片流
InputStream is = connection.getInputStream();
////将图片流转化成Bitmap位图,返回
Bitmap bitmap = BitmapFactory.decodeStream(is);
return bitmap;
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
2:在适配器类调用自定义图片加载器类的图片,如下:
public class MyListViewAdapter extends BaseAdapter {
private Context context;
private List<Foods.ResultBean.DataBean> list;
public MyListViewAdapter(Context context, List<Foods.ResultBean.DataBean> list) {
this.context=context;
this.list=list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView==null){
convertView=View.inflate(context, R.layout.listview_item,null);
}
ImageView image_1 = (ImageView) convertView.findViewById(R.id.image_1);
// 使用自定义的AsyTask类
// 将图片的uri作为这个图片一个Tag
image_1.setTag(list.get(position).getAlbums().get(0));
// //设置默认显示的图片
image_1.setImageResource(R.mipmap.ic_launcher);
//// 设置图片
setImage(list.get(position).getAlbums().get(0),image_1);
return convertView;
}
//创建一个方法传两个参数 参数1:图片路径 参数2:imageview控件
//方法里面实例化自定义的加载图片类,实现其接口跟方法
public void setImage(final String url, final ImageView imageView){
new ImageLoaderAsyncTask(new ImageLoaderAsyncTask.ImageCallBack() {
@Override
public void callBack(Bitmap bitmap) {
//回掉的接口里的方法 判断bitmap不为空 然后判断imageview不为空以及Imageview的Tag是否是设置的Tag
//如果是,设置图片
if (bitmap != null){
if (imageView.getTag() != null && url.equals(imageView.getTag())){
imageView.setTag(url);
imageView.setImageBitmap(bitmap);
}
}
}
}){
}.execute(url);
}
}
解决图片错位的问题
猜你喜欢
转载自blog.csdn.net/qq_38619138/article/details/71124884
今日推荐
周排行