我正在尝试制作一个能够捕获最多4张图像的活动,以便将它们发送到我们的服务器。 我知道如何捕捉图像并将其添加到活动,这已经可行,以非效率或优雅方式,我我希望改善这一点。
现在,我Button
使用onClick
方法将图片附加到空ImageView
,并跟踪已附加了多少图像,因为我可以删除一张图片,以便挑选一张新图片。
我想知道最佳策略,代码明智的未来变化。
我考虑过但尚未实施的选项:
Button
将图片添加到GridView
,以便我可以在其适配器中添加和删除图片。ImageView
可以onClick
附加和删除自己的图片,因此会移除Button
任何建议,想法,策略,想法?
提前谢谢!
我已使用自定义适配器(GridView
)
GridImageAdapter
public class GridImagesAdapter extends BaseAdapter{
private List<Bitmap> images = new ArrayList<Bitmap>();
private int img_height;
public GridImagesAdapter(Context context, List<Bitmap> imagenes){
this.imagenes = imagenes;
inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
img_height = (int) (metrics.density * Constants.ONE_ROW_IMG_HEIGHT);
}
/*
* other common methods
*/
@Override
public View getView(int position, View row, ViewGroup parent) {
ViewHolder holder;
if(row == null){
row = inflater.inflate(R.layout.grid_img_item, parent, false);
holder = new ViewHolder();
holder.image = (ImageView) row.findViewById(R.id.img_add_in_grid);
holder.image.setLayoutParams(new GridView.LayoutParams(LayoutParams.MATCH_PARENT, img_height));
holder.image.setScaleType(ImageView.ScaleType.CENTER_CROP);
}else{
holder = (ViewHolder)row.getTag();
}
holder.image.setImageBitmap(getItem(position));
row.setTag(holder);
return row;
}
private class ViewHolder{
ImageView image;
}
}
所以我可以在活动中填充GridView
,如:
private void populateGridView(){
Bitmap a;
a = BitmapFactory.decodeResource(getResources(), R.drawable.no_image);
images.add(a);
images.add(a);
images.add(a);
images.add(a);
GridImagesAdapter adapter = new GridImagesAdapter(this, images);
mGridView.setAdapter(adapter);
mGridView.setOnItemClickListener(new GetImage());
}
其中new GetImage()
是负责图像捕获的OnItemClickListener
,并替换R.drawable.no_image
位图中的一个
(其中没有相关代码,只是向用户显示Dialog
以便从相机或图库中选择并启动此类Activity
,然后在onActivityResult
方法中我有{ {1}}使用的是我处理适配器更改的地方)
我的问题更多是关于此处选择的策略而不是实际代码本身。 缺点?是否有更优雅或正确的方法来达到同样的效果?
欢迎一切,谢谢你的答案。
答案 0 :(得分:1)
您是否创建了一个gridview并设置了适配器类?
因为我已经实施了类似的案例。项目被动态地(通过用户输入)添加到列表视图中,并且每行中都有一个按钮来删除该特定行(也来自数据库)。
如果你有,请告诉我们从哪里开始。
答案 1 :(得分:0)
您的总体想法或多或少是正确的。你提到GetImage
是无关紧要的,但绝对不是。从我的理解,你正在那里直接改变视图。相反,您应该操纵适配器,更改它所持有的数据,然后调用notifyDataSetChanged。适配器将负责通知gridview数据已更改并且视图将更新。我可能也会使用ArrayAdapter而不是BaseAdapter。