
打开相机拍照和从本地相册获取图片以及图片的剪切
在布局资源中定义相应的按钮,设置ID(如R.id.btn_take_photo)。 注册点击事件,调用相应的选择图片方法。 处理ActivityForResult结果,根据请求码获取图片数据并进行处理。
发布日期:2021-05-24 17:12:35
浏览次数:12
分类:精选文章
本文共 2283 字,大约阅读时间需要 7 分钟。
模拟点击事件实现头像选择功能
在Android开发中,我们需要实现用户点击图片时触发的操作,例如从相册或相机选择图片作为头像。以下将详细阐述一个典型实现方案。
菜单点击事件监听
View.OnClickListener itemsOnClick = new View.OnClickListener() { public void onClick(View v) { // 消除弹出窗口 menuWindow.dismiss(); switch (v.getId()) { case R.id.btn_take_photo: // 启动相机拍摄 choseHeadImageFromCameraCapture(); break; case R.id.btn_pick_photo: // 从本地相册选择图片 choseHeadImageFromGallery(); break; } }};
主要功能模块说明
1. 发现SD卡状态
确保设备具备SD存储卡是实现图片存储的前提条件。
public static boolean hasSdcard() { String state = Environment.getExternalStorageState(); return state.equals(Environment.MEDIA_MOUNTED);}
2. 从本地相册选择图片
创建一个意图,指定图片文件类型,并启动图像选择器。
private void choseHeadImageFromGallery() { Intent intentFromGallery = new Intent(); intentFromGallery.setType("image/*"); intentFromGallery.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(intentFromGallery, CODE_GALLERY_REQUEST);}
3. 启动相机拍摄
设置相机拍摄参数并启动相机应用。
private void choseHeadImageFromCameraCapture() { Intent intentFromCapture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (hasSdcard()) { intentFromCapture.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile( new File(Environment.getExternalStorageDirectory(),_IMAGE_FILE_NAME) )); } startActivityForResult(intentFromCapture, CODE_CAMERA_REQUEST);}
4. 图片裁剪功能
根据设置的宽高比例对图片进行裁剪操作。
public void cropRawPhoto(Uri uri) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); intent.putExtra("crop", "true"); intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); intent.putExtra("outputX", output_X); intent.putExtra("outputY", output_Y); intent.putExtra("return-data", true); startActivityForResult(intent, CODE_RESULT_REQUEST);}
5. 显示选择的图片
将剪裁后的图片数据加载到头像视图中。
private void setImageToHeadView(Intent intent) { Bundle extras = intent.getExtras(); if (extras != null) { Bitmap photo = extras.getParcelable("data"); iv_head.setImageBitmap(photo); }}
结合使用说明
这个方案全面覆盖了从点击事件触发的所有必要操作,确保图片选择过程的流畅性和稳定性。
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年04月29日 05时16分04秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
嵌入式系统试题库(CSU)
2019-03-12
【自考】之信息资源管理(一)
2019-03-12
setup facatory9.0打包详细教程(含静默安装和卸载)
2019-03-12
Linux kernel pwn --- CSAW2015 StringIPC
2019-03-12
IDEA 找不到 Persistence窗口解决办法
2019-03-12
C++ Primer Plus读书笔记:循环读取(错误处理)
2019-03-12
Form窗体属性
2019-03-12
vue 错误收集
2019-03-12
00010.02最基础客户信息管理软件(意义类的小项目,练习基础,不涉及数据库)
2019-03-12
00013.05 字符串比较
2019-03-12
Effective Java 读书笔记
2019-03-12
SpringBoot使用@Email报错误
2019-03-13
访问servlet时弹出文件下载框解决方法
2019-03-13
IDEA-@Slf4j和log标签&@Data(Lombok)无效
2019-03-13
Thymeleaf 生成下标,索引,使用Stat变量
2019-03-13
初始微服务---Springcloud发展【第一期】
2019-03-13
RAFT 拜占庭将军 共识算法
2019-03-13
UE4 错误列表 error码(只记录我遇到的情况,持续添加,未完成)
2019-03-13