8.0选择拍照 GridView

/*

加载适配器,以及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);
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_39738488/article/details/81808953