Android实现选择图片或拍照设置头像的代码示例
10 浏览量
更新于2024-08-29
1
收藏 48KB PDF 举报
"这篇教程将介绍如何在Android应用中实现让用户通过手机拍照或从本地相册选取图片,并进行裁剪来设置头像的功能。"
在Android开发中,为应用程序添加设置头像的功能是一项常见的需求,这通常涉及到访问用户的相机和相册。下面我们将详细讲解如何在Android应用中实现这一功能。
首先,我们需要创建一个`MainActivity`,在这个活动中包含一个用于显示头像的`ImageView`以及两个按钮,一个用于打开相机,另一个用于打开相册。在`MainActivity.java`文件中,我们导入所需的库和类,例如`ActionBarActivity`、`View`、`Button`、`ImageView`、`Intent`、`Bitmap`等。
```java
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
```
接着,我们定义常量来存储头像文件名、请求码以及裁剪后的图片尺寸。例如:
```java
private static final String IMAGE_FILE_NAME = "temp_head_image.jpg";
private static final int CODE_GALLERY_REQUEST = 0xa0; // 从相册选取图片的请求码
private static final int CODE_CAMERA_REQUEST = 0xa1; // 使用相机拍照的请求码
private static final int CODE_RESULT_REQUEST = 0xa2; // 裁剪结果的请求码
private static int output_X = 480; // 裁剪后的宽度
private static int output_Y = 480; // 裁剪后的高度
```
在`onCreate`方法中,初始化`ImageView`和按钮,并为它们设置点击事件监听器。点击事件会触发打开相机或相册的`Intent`。
```java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
headImage = (ImageView) findViewById(R.id.head_image);
Button btnChooseFromGallery = (Button) findViewById(R.id.btn_choose_from_gallery);
Button btnTakePhoto = (Button) findViewById(R.id.btn_take_photo);
btnChooseFromGallery.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openGallery();
}
});
btnTakePhoto.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openCamera();
}
});
}
```
`openGallery()`方法用于打开系统相册,选择图片:
```java
private void openGallery() {
Intent galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(galleryIntent, CODE_GALLERY_REQUEST);
}
```
`openCamera()`方法则是启动相机:
```java
private void openCamera() {
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File photoFile = createImageFile();
if (photoFile != null) {
Uri photoURI = Uri.fromFile(photoFile);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
startActivityForResult(cameraIntent, CODE_CAMERA_REQUEST);
}
}
private File createImageFile() {
// 创建一个文件来保存拍摄的照片
try {
File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(
IMAGE_FILE_NAME, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);
return image;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
```
当用户从相册选取或拍照完成后,系统会回调`onActivityResult`方法,这里我们需要处理返回的图片并进行裁剪:
```java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (requestCode == CODE_GALLERY_REQUEST) {
// 从相册选取的图片
handleCrop(data.getData());
} else if (requestCode == CODE_CAMERA_REQUEST) {
// 拍照的照片
handleCrop(Uri.fromFile(createImageFile()));
}
}
}
private void handleCrop(Uri uri) {
Intent cropIntent = new Intent("com.android.camera.action.CROP");
cropIntent.setDataAndType(uri, "image/*");
cropIntent.putExtra("crop", "true");
cropIntent.putExtra("aspectX", output_X);
cropIntent.putExtra("aspectY", output_Y);
cropIntent.putExtra("outputX", output_X);
cropIntent.putExtra("outputY", output_Y);
cropIntent.putExtra("return-data", true);
startActivityForResult(cropIntent, CODE_RESULT_REQUEST);
}
```
最后,在`onActivityResult`中处理裁剪后的图片并将其显示在`ImageView`上:
```java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CODE_RESULT_REQUEST && resultCode == RESULT_OK) {
Bundle extras = data.getExtras();
Bitmap bitmap = extras.getParcelable("data");
headImage.setImageBitmap(bitmap);
}
}
```
以上就是Android应用中实现通过手机拍照或从本地相册选取图片并进行裁剪设置头像的完整流程。这个过程涵盖了启动相机、选择相册图片、裁剪图片以及显示结果等关键步骤,是许多社交类应用中常用的一个功能实现。
2015-09-02 上传
2020-08-31 上传
2016-01-14 上传
2016-02-18 上传
2014-12-16 上传
weixin_38625464
- 粉丝: 5
- 资源: 937
最新资源
- 高清艺术文字图标资源,PNG和ICO格式免费下载
- mui框架HTML5应用界面组件使用示例教程
- Vue.js开发利器:chrome-vue-devtools插件解析
- 掌握ElectronBrowserJS:打造跨平台电子应用
- 前端导师教程:构建与部署社交证明页面
- Java多线程与线程安全在断点续传中的实现
- 免Root一键卸载安卓预装应用教程
- 易语言实现高级表格滚动条完美控制技巧
- 超声波测距尺的源码实现
- 数据可视化与交互:构建易用的数据界面
- 实现Discourse外聘回复自动标记的简易插件
- 链表的头插法与尾插法实现及长度计算
- Playwright与Typescript及Mocha集成:自动化UI测试实践指南
- 128x128像素线性工具图标下载集合
- 易语言安装包程序增强版:智能导入与重复库过滤
- 利用AJAX与Spotify API在Google地图中探索世界音乐排行榜