我正在寻找关于如何做到这一点的一些建议。
我希望有一个用户从Android图库中选择的活动,然后图像将被添加到活动的网格视图中。我已经成功地单独实施了两个,但是当我必须将它们组合起来时,我感到很茫然。网格视图教程是here。问题是网格视图教程使用res / drawable中的图像,因此我从图库中获取的uri并不完全正常。
我应该如何在ImageAdapter类中设置图像?我一直在尝试使用手机中其中一个图像的uri地址来做imageView.setImageBitmap(位图),但它没有用。
我正在考虑创建一个String的ArrayList,其中包含从库中获取的图像的uri。这样我就可以轻松添加,删除和存储图像。
除此之外的其他问题是,如果我显示图像,如果我再次调用setAdapter,它会刷新吗?如果我从源ArrayList中删除,会自动删除工作吗?
谢谢
以下是我编辑的网格视图中的代码:
public class ImageAdapter extends BaseAdapter {
private Context mContext;
public ImageAdapter(Context c) {
mContext = c;
}
public int getCount() {
return imageId.size();
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) { // if it's not recycled, initialize some attributes
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
} else {
imageView = (ImageView) convertView;
}
Uri targetUri = Uri.parse(tests.get(0));
//tests contains the uri of the photo i'm trying to import from my phone gallery in string form
Bitmap bitmap;
bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(targetUri));
imageView.setImageBitmap(bitmap);
return imageView;
}
}
答案 0 :(得分:2)
回答第一部分:如果您的测试包含您选择的图片的Uri,只需使用imageView.setImageURI(targetUri)
。
回答第二部分:要刷新GridView,只需调用mGridView.invalidateViews()
,您的整个GridView将被重绘,因此您的源中发生的任何更改都将在此处反映出来。无需再次调用setAdapter()。当您第一次绘制网格时,setAdapter()最初只会被调用一次。之后,只需使用invalidateViews()来刷新它。