最近在做一个退款模块,要求上传凭证,但是凭证上可以删除的。
就是图片这种效果
<GridView android:id="@+id/gv_apply_refund_pics" android:layout_width="match_parent" android:layout_height="108dp" android:background="@color/white" android:cacheColorHint="#00000000" android:checked="false" android:clickable="false" android:columnWidth="108dp" android:focusable="false" android:focusableInTouchMode="false" android:gravity="center" android:horizontalSpacing="1.0dp" android:listSelector="#00000000" android:numColumns="auto_fit" android:scrollbars="none" android:stretchMode="spacingWidthUniform" android:verticalSpacing="1.0dip"></GridView>
首先将项目的资源图片插入到图片集合里面
可以先存一下临时地址,之后删除这个地址,楼主没有做这个操作
private void addFirstPic() { ImageView imageView = new ImageView(this); imageView.setBackgroundResource(R.drawable.pic_shangchuan); Bitmap bm = ((BitmapDrawable) imageView.getBackground()).getBitmap(); File f = new File("/sdcard/", System.currentTimeMillis() + "add.pic"); if (f.exists()) { f.delete(); } try { FileOutputStream out = new FileOutputStream(f); bm.compress(Bitmap.CompressFormat.PNG, 90, out); out.flush(); out.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } pic.add(f.getAbsolutePath()); }
gv_pics.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, final int position, long l) { if (position == pic.size() - 1) { Intent intent = new Intent(ApplyRefundActivity.this, ImageGridActivity.class); //实现跳转 startActivityForResult(intent, CHOOSEPHOTO_REQUEST_CODE); } ImageView iv_pic_del = (ImageView) view.findViewById(R.id.iv_pic_del); iv_pic_del.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { pic.remove(position); picAdapter.notifyDataSetChanged(); if (pic.size() == 0) { addFirstPic(); } picAdapter.notifyDataSetChanged(); } }); } });
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // //onActivityResult里一行代码回调 if (data != null) { if (resultCode == ImagePicker.RESULT_CODE_ITEMS) { if (data != null && requestCode == CHOOSEPHOTO_REQUEST_CODE) { ArrayList<ImageItem> mImages = (ArrayList<ImageItem>) data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS); pic.clear(); for (int i = 0; i < mImages.size(); i++) { pic.add(mImages.get(i).path); } addFirstPic(); picAdapter.notifyDataSetChanged(); } else { Toast.makeText(this, "没有数据", Toast.LENGTH_SHORT).show(); } } } }
public class PicSelectAdapter extends BaseAdapter { private Activity mActivity; private List<String> images; private int clickItemIndex = -1;//根据这个变量来辨识选中的current值 public PicSelectAdapter(Activity activity, List<String> mImages) { mActivity = activity; images = mImages; } @Override public int getCount() { return images.size(); } @Override public Object getItem(int i) { return null; } @Override public long getItemId(int i) { return 0; } @Override public View getView(final int i, View view, ViewGroup viewGroup) { final PicViewHolder holder; if (view == null) { view = View.inflate(mActivity, R.layout.item_pic, null); holder = new PicViewHolder(view); view.setTag(holder); } else { holder = (PicViewHolder) view.getTag(); } Bitmap bitMBitmap = getSmallBitmap(images.get(i)); holder.iv_pic.setImageBitmap(bitMBitmap);//为ImageView设置图片资源
//因为上传凭证只有三张所以进行了一下限制 if (images.size() == 4) { if ((images.size() - 1) == i) { holder.iv_pic_del.setVisibility(View.GONE); holder.iv_pic.setVisibility(View.GONE); } else { holder.iv_pic.setVisibility(View.VISIBLE); holder.iv_pic_del.setVisibility(View.VISIBLE); } } else if (images.size() == 1) { holder.iv_pic.setVisibility(View.VISIBLE); holder.iv_pic_del.setVisibility(View.GONE); } else { if ((images.size() - 1) == i) { holder.iv_pic_del.setVisibility(View.GONE); holder.iv_pic.setVisibility(View.VISIBLE); } else { holder.iv_pic.setVisibility(View.VISIBLE); holder.iv_pic_del.setVisibility(View.VISIBLE); } } if (holder.iv_pic_del.getVisibility() == View.VISIBLE) { if (i == clickItemIndex) { holder.iv_pic_del.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { images.remove(clickItemIndex); if (images.size() == 0) { ImageView imageView = new ImageView(mActivity); imageView.setBackgroundResource(R.drawable.pic_shangchuan); Bitmap bm = ((BitmapDrawable) imageView.getBackground()).getBitmap(); File f = new File("/sdcard/WeiMiLife/", "add.pic"); if (f.exists()) { f.delete(); } try { FileOutputStream out = new FileOutputStream(f); bm.compress(Bitmap.CompressFormat.PNG, 90, out); out.flush(); out.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } images.add(f.getAbsolutePath()); } notifyDataSetChanged(); } }); } } return view; } // 根据路径获得图片并压缩,返回bitmap用于显示 public static Bitmap getSmallBitmap(String filePath) { final BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeFile(filePath, options); // Calculate inSampleSize options.inSampleSize = calculateInSampleSize(options, 1080, 1920); // Decode bitmap with inSampleSize set options.inJustDecodeBounds = false; return BitmapFactory.decodeFile(filePath, options); } //计算图片的缩放值 public static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) { final int height = options.outHeight; final int width = options.outWidth; int inSampleSize = 1; if (height > reqHeight || width > reqWidth) { final int heightRatio = Math.round((float) height / (float) reqHeight); final int widthRatio = Math.round((float) width / (float) reqWidth); inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio; } return inSampleSize; } class PicViewHolder { private final ImageView iv_pic; private final ImageView iv_pic_del; public PicViewHolder(View view) { iv_pic = (ImageView) view.findViewById(R.id.iv_pic); iv_pic_del = (ImageView) view.findViewById(R.id.iv_pic_del); } } }