我想在我的自定义适配器 ImageAdapter 中使用异步任务来显示手机中的所有图像,因为 UI 线程上的消息工作太多。我尝试使用此代码(现在检索 gifview 的情况):适配器:
public ImageAdapter(ArrayList<Media> liste, Context context) {
this.listeImages = liste;
mContext = context;
}
@Override
public int getCount() {
return listeImages.size();
}
@Override
public Object getItem(int position) {
return listeImages.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolderPic viewHolder= new ViewHolderPic();
if (convertView == null) {
convertView = lInflater.inflate(R.layout.imagegallery, null);
viewHolder.imageView = (ImageView)
convertView.findViewById(R.id.picGallery);
// viewHolder.gifView = (GifImageView)
convertView.findViewById(R.id.gifG);
convertView.setTag(viewHolder);
} else {
viewHolder =(ViewHolderPic) convertView.getTag();
}
viewHolder.filePic = new
File(listeImages.get(position).getPath());
PopulateGallery populate=new PopulateGallery();
populate.execute(viewHolder);
return convertView;
}
}
异步任务:
类 PopulateGallery 扩展了 AsyncTask {
ViewHolderPic viewHolder;
Bitmap bitmap;
@Override
protected Boolean doInBackground(ViewHolderPic... params) {
viewHolder=params[0];
int widhtPic=(screenWidth/3)-6;
// if(!getExtensionFile(viewHolder.filePic).equals("image/gif")) {
// viewHolder.gifView.setVisibility(View.GONE);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = false;
options.inPreferredConfig = Bitmap.Config.ARGB_4444;
options.inDither = true;
bitmap = decodeFile(viewHolder.filePic, widhtPic, (int)
getResources().getDimension(R.dimen.imageGallery_height));
return true;
}
@Override
public void onPostExecute(Boolean result){
viewHolder.imageView.setImageBitmap(bitmap);
}
}
但这是一团糟。有空格,图像大小不一样。有时我在 UI 线程中没有出现过 OutOfMemoryError。我尝试使用:
try {
populate.execute(viewHolder).get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
但没有结果。我以为是因为在返回 convertView 之前任务没有完成,但问题仍然存在。我能做些什么来解决这个问题。谢谢。
您可以使用毕加索。这是一个很好的库,可以处理与图像相关的任务,例如显示大图像、来自网络的图像或其他图像。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句