博客
关于我
打开相机拍照和从本地相册获取图片以及图片的剪切
阅读量:718 次
发布时间:2019-03-21

本文共 2330 字,大约阅读时间需要 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);
}
}

结合使用说明

  • 在布局资源中定义相应的按钮,设置ID(如R.id.btn_take_photo)。
  • 注册点击事件,调用相应的选择图片方法。
  • 处理ActivityForResult结果,根据请求码获取图片数据并进行处理。
  • 这个方案全面覆盖了从点击事件触发的所有必要操作,确保图片选择过程的流畅性和稳定性。

    转载地址:http://rddgz.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现markov chain马尔可夫链算法(附完整源码)
    查看>>
    Objective-C实现MATLAB中Filter函数功能(附完整源码)
    查看>>
    Objective-C实现matrix chainorder矩阵链顺序算法(附完整源码)
    查看>>
    Objective-C实现matrix exponentiation矩阵求幂算法(附完整源码)
    查看>>
    Objective-C实现MatrixMultiplication矩阵乘法算法 (附完整源码)
    查看>>
    Objective-C实现max non adjacent sum最大非相邻和算法(附完整源码)
    查看>>
    Objective-C实现max subarray sum最大子数组和算法(附完整源码)
    查看>>
    Objective-C实现max sum sliding window最大和滑动窗口算法(附完整源码)
    查看>>
    Objective-C实现MaxHeap最大堆算法(附完整源码)
    查看>>
    Objective-C实现MaximumSubarray最大子阵列(Brute Force蛮力解决方案)算法(附完整源码)
    查看>>
    Objective-C实现MaximumSubarray最大子阵列(动态规划解决方案)算法(附完整源码)
    查看>>
    Objective-C实现maxpooling计算(附完整源码)
    查看>>
    Objective-C实现max_difference_pair最大差异对算法(附完整源码)
    查看>>
    Objective-C实现max_heap最大堆算法(附完整源码)
    查看>>
    Objective-C实现MD5 (附完整源码)
    查看>>
    Objective-C实现md5算法(附完整源码)
    查看>>
    Objective-C实现MeanSquareError均方误差算法 (附完整源码)
    查看>>
    Objective-C实现median filter中值滤波器算法(附完整源码)
    查看>>