调用系统照相机,图库功能实现
修改用户的头像中常见功能。已经有两个项目中有需求。
底部弹出Popupwindow,将图片设置到指定位置。
1,自定义的Popupwindow中,设置点击事件的监听和回调接口
public void setHeadActionListener(HeadPicListener listener){
this.listener = listener;
}
public void show(View parent){
window.showAtLocation(parent, Gravity.BOTTOM, 0, 0);
}
// 拍照
// 从相册中选择
// 结果
public interface HeadPicListener {
/* 拍照 */
public int PICK_FROM_CAMERA = 1;
/* 剪切 */
public int CROP_FROM_CAMERA = 2;
/* 从相机选择图片 */
public int PICK_FROM_FILE = 3;/* 拍照 */
public void takePic();/* 用户相册 */
public void userAlbum();}
2,Activity类里,实现接口监听,调用拍照,或选择图片的方法
pop.setHeadActionListener(new HeadPicListener() {
@Override
public void userAlbum() {
pickFromFile();
}@Override
public void takePic() {
pickFormCamera();
}
});
/**
* 手机相册
*/
private void pickFromFile() {
Intent intent = new Intent(Intent.ACTION_PICK, null);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
"image/*");
startActivityForResult(intent, HeadPicListener.PICK_FROM_FILE);
}
/**
* 手机拍照
*/
private void pickFormCamera() {
tempFile = new File(photo.getAbsoluteFile(), getPhotoFileName());
// 调用系统的拍照功能
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// 指定调用相机拍照后照片的存储路径
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
startActivityForResult(intent, HeadPicListener.PICK_FROM_CAMERA);
}
3,拍照结束或者选择图片完成后
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
ImageLoader imageLoader = ImageLoader.getInstance();
imageLoader.init(ImageLoaderConfiguration.createDefault(getActivity()));
switch (requestCode) {
case HeadPicListener.PICK_FROM_CAMERA:
// 当选择拍照时调用
if (tempFile.length() > 0) {
String path = tempFile.getAbsolutePath();
imageLoader.displayImage("file:/" + path, my_img_takePic,
options);
}
break;
case HeadPicListener.PICK_FROM_FILE:
// 当选择从本地获取图片时
if (data != null) {
Uri mImageCaptureUri = data.getData();
File tmpFile = new File(FileUtil.getRealPath(getActivity(),
mImageCaptureUri));
final String path = tmpFile.getAbsolutePath();
imageLoader.displayImage("file:/" + path, my_img_takePic,
options);
}
default:
break;
}
其中,还有文件暂时存放的位置,图片生成工具类(略)。
两个项目中都出现的东西,现在才知道总结,不羞愧吗?