以前的那个非常复杂且难以维护。
1、拍照上传
2、相册上传
3、权限申请
参考:
<uses-feature android:name="android.hardware.camera" />
<!--相机权限-->
<uses-permission android:name="android.permission.CAMERA" />
<!--写入SD卡的权限:如果你希望保存相机拍照后的照片-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--读取SD卡的权限:打开相册选取图片所必须的权限-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
---------------------
作者:code小生
来源:CSDN
原文:https://blog.csdn.net/wufeng55/article/details/80918749
版权声明:本文为博主原创文章,转载请附上博文链接!
一、打开相机
/**
* 打开系统相机(亲测可用)
*/
private void openSysCamera() {
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 打开系统相机
// 将拍摄的照片保存在SD卡
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(
new File(Environment.getExternalStorageDirectory(), imgName)));
// 开启跳转
startActivityForResult(cameraIntent, CAMERA_RESULT_CODE);
}
部署照片
@Bind(R.id.img)
SimpleDraweeView Img;
private File file;
file = new File(uri.getPath());
Img.setImageURI(uri);
总之,拍照或是相册选择,裁剪完需要调用保存方法,才能在本地相册显示。 好吧,不调用也能在手机上找到,就是格式有些问题。
对某图片选择界面对分析
布局:
1、三列,第一张是“拍摄照片”,其他的是照片。
2、点击后,除第一张外都有“选择”和“未选择”两种状态展示,且最多选择9张。
3、点击图片、选中后点击预览都可以进预览界面,在预览界面有“原图”、“完成”、“选择”三个按钮,选择后原图展示图片大小信息。
4、未选择显示当前图片排名和总图片数,选择后显示选择的数量和当前排名。
下面我们将逐一揭开它的神秘面纱:
1、这是一个GridView嘛,三列岂不好说,布局文件中增加属性:android:numColumns="3"。
第一张差异显示要从适配器入手,每个照片都有两种属性:显示“拍摄照片”或者显示照片。我们以此对其区别展示:
@Override
public View getView(final int position, View convertView, ViewGroup parent){
int itemViewType = getItemViewType(position);// 获取照片属性的方法,如何获取我们稍后在谈
if(itemViewType == ITEM_TYPE_CAMERA){// 即,如果是显示“拍摄照片”
convertView = LayoutInflater.from(mActivity).inflate(R.layout.adapter_show_camera, parent, false);
// mImageSize的值其实是获取的控件宽度,这样就成了一个正方形,mImageSize = Utils.getImageItemWidth(mActivity);
convertView.setlayoutParams(new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, mImageSize));
convertView,setOnClickListener(...);
} else {// 显示图片
// holder复用
final ViewHolder holder;
if(convertView == null){
convertView = LayoutInflater.form(mActivity).inflate(R.layout.adapter_image_list_item, parent, false);
convertView.setlayoutParams(new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, mImageSize));
}
}
}