我正在尝试异步加载网格视图中的缩略图,因为以其他方式加载需要太长时间才能显示!
当我按照正常方式操作时,它可以很好地显示图像。(代码和图片)
实用工具
public static Bitmap getThumbnail(Context context, Bitmap bitmap, int columns){
WindowManager wm = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int scale = size.x / columns;
Bitmap bit = ThumbnailUtils.extractThumbnail(bitmap, scale, scale);
return bit;
}
适配器
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
if(convertView == null){
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.adapter_item, null);
}
else{
view = convertView;
}
ImageView image = (ImageView)view.findViewById(R.id.img_item);
image.setImageBitmap(Utilities.getThumbnail(context, BitmapFactory.decodeFile(((Item) this.collection.get(position)).getSrc()), 5));
return view;
}
使用asyncTask后的结果如下
AsyncTask
public class ImageGridHandler extends AsyncTask<String, Void, Bitmap>{
private final WeakReference<ImageView> imageViewReference;
private Context context;
public ImageGridHandler(Context context, ImageView img){
imageViewReference = new WeakReference<ImageView>(img);
this.context = context;
}
@Override
protected Bitmap doInBackground(String... params) {
return PixzelleUtilities.getThumbnail(this.context, BitmapFactory.decodeFile(params[0]) ,5);
}
@Override
protected void onPostExecute(Bitmap result) {
final ImageView imageView = imageViewReference.get();
imageView.setImageBitmap(result);
}
}
适配器
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
if(convertView == null){
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.adapter_item, null);
}
else{
view = convertView;
}
ImageView image = (ImageView)view.findViewById(R.id.img_item);
image.setImageBitmap(null);
ImageGridHandler handler = new ImageGridHandler(context, image);
handler.execute(((Item)this.collection.get(position)).getSrc());
return view;
}
这些图片是小黑矩形。
链接是正确的,因为我可以点击图片并在弹出窗口中打开!
我是否漏掉了什么?