/*
加载适配器,以及gridview的Item点击事件
**/
private void showImageAdd() { imageAddAdapter = new ImageAddAdapterJie(list_img, NewWaiChuDetialActivity.this); gvImg.setAdapter(imageAddAdapter); gvImg.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { i = 1; if (position == parent.getChildCount() - 1) { // Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); // startActivityForResult(intent, TAKE_PHOTO_REQUEST); requestPower(); requestAllPower(); Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); imageUri = null; if (takePictureIntent.resolveActivity(NewWaiChuDetialActivity.this.getPackageManager()) != null) { String sdcardState = Environment.getExternalStorageState(); File outputImage = null; if (Environment.MEDIA_MOUNTED.equals(sdcardState)) { try { outputImage = createImageFile(NewWaiChuDetialActivity.this); } catch (IOException e) { e.printStackTrace(); } } else { Toast.makeText(NewWaiChuDetialActivity.this.getApplicationContext(), "内存异常", Toast.LENGTH_SHORT).show(); } try { if (outputImage.exists()) { outputImage.delete(); } outputImage.createNewFile(); } catch (IOException e) { e.printStackTrace(); } if (outputImage != null) { imageUri = Uri.fromFile(outputImage); takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); startActivityForResult(takePictureIntent, 0); } } } } }); }
//result
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case 0: String path = imageUri.getPath(); File file = new File(path); Log.e("====", path + ""); if (path != null && file.length() != 0) { list_img.add(path); list_imguplode.add(path); } imageAddAdapter.notifyDataSetChanged(); Log.e("====", imageUri + ""); break; }
//权限
public void requestPower() { //判断是否已经赋予权限 if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { //如果应用之前请求过此权限但用户拒绝了请求,此方法将返回 true。 if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {//这里可以写个对话框之类的项向用户解释为什么要申请权限,并在对话框的确认键后续再次申请权限 } else { //申请权限,字符串数组内是一个或多个要申请的权限,1是申请权限结果的返回参数,在onRequestPermissionsResult可以得知申请结果 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA,}, 1); } } } //添加权限 public void requestAllPower() { if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { } else { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}, 1); } } }
//图片存储路径
public static File createImageFile(Activity mActivity) throws IOException { String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); String imageFileName = "JPEG_" + timeStamp;//创建以时间命名的文件名称 File storageDir = getOwnCacheDirectory(mActivity, "takephoto");//创建保存的路径 File image = new File(storageDir.getPath(), imageFileName + ".jpg"); if (!image.exists()) { try { //在指定的文件夹中创建文件 image.createNewFile(); } catch (Exception e) { } } return image; }
//适配器
public class ImageAddAdapterJie extends BaseAdapter { private List<String> lists; Context context; public ImageAddAdapterJie(List lists, Context context) { this.lists = lists; this.context = context; } @Override public int getCount() { int count = lists == null ? 1 : lists.size() + 1; if (count > 20) { return lists.size(); } else { return count; } } @Override public Object getItem(int position) { return lists.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { Log.e("listSize>>>>", lists.size() + ""); convertView = LayoutInflater.from(context).inflate(R.layout.item_imageadd, null); ImageView iv = convertView.findViewById(R.id.iv_imgadd); if (position < lists.size()) { //代表+号之前的需要正常显示图片 String picUrl = lists.get(position); //图片路径 Log.e(">>>>", picUrl); Glide.with(context).load(picUrl).into(iv); } else { iv.setImageResource(R.mipmap.xiangji);//最后一个显示加号图片 } return convertView; } }
//附上MyGridView
/** * Created by keyBoarder on 2018/5/8. */
public class MyGridView extends GridView { public MyGridView(Context context, AttributeSet attrs) { super(context, attrs); } public MyGridView(Context context) { super(context); } public MyGridView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec( Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } }