【Android设置头像,手机拍照或从本地相册选取图片作为头像】

像微信、QQ、微博等社交类的APP,通常都有设置头像的功能,设置头像通常有两种方式:

1,让用户通过选择本地相册之类的图片库中已有的图像,裁剪后作为头像。

2,让用户启动手机的相机拍照,拍完照片后裁剪,然后作为头像。

我现在写一个简单的完整代码例子,说明如何在Android中实现上述两个头像设置功能。

MainActivity.java文件:

package zhangpgil.photo;import java.io.File;import android.support.v7.app.ActionBarActivity;import android.view.View;import android.widget.Button;import android.widget.ImageView;import android.widget.Toast;import android.content.Intent;import android.graphics.Bitmap;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;public class MainActivity extends ActionBarActivity {/* 头像文件 */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;// 裁剪后图片的宽(X)和高(Y),480 X 480的正方形。private static int output_X = 480;private static int output_Y = 480;private ImageView headImage = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);headImage = (ImageView) findViewById(R.id.imageView);Button buttonLocal = (Button) findViewById(R.id.buttonLocal);buttonLocal.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {choseHeadImageFromGallery();}});Button buttonCamera = (Button) findViewById(R.id.buttonCamera);buttonCamera.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {choseHeadImageFromCameraCapture();}});}// 从本地相册选取图片作为头像private void choseHeadImageFromGallery() {Intent intentFromGallery = new Intent();// 设置文件类型intentFromGallery.setType("image/*");intentFromGallery.setAction(Intent.ACTION_GET_CONTENT);startActivityForResult(intentFromGallery, CODE_GALLERY_REQUEST);}// 启动手机相机拍摄照片作为头像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);}@Overrideprotected void onActivityResult(int requestCode, int resultCode,Intent intent) {// 用户没有进行有效的设置操作,返回if (resultCode == RESULT_CANCELED) {Toast.makeText(getApplication(), "取消", Toast.LENGTH_LONG).show();return;}switch (requestCode) {case CODE_GALLERY_REQUEST:cropRawPhoto(intent.getData());break;case CODE_CAMERA_REQUEST:if (hasSdcard()) {File tempFile = new File(Environment.getExternalStorageDirectory(),IMAGE_FILE_NAME);cropRawPhoto(Uri.fromFile(tempFile));} else {Toast.makeText(getApplication(), "没有SDCard!", Toast.LENGTH_LONG).show();}break;case CODE_RESULT_REQUEST:if (intent != null) {setImageToHeadView(intent);}break;}super.onActivityResult(requestCode, resultCode, intent);}/** * 裁剪原始的图片 */public void cropRawPhoto(Uri uri) {Intent intent = new Intent("com.android.camera.action.CROP");intent.setDataAndType(uri, "image/*");// 设置裁剪intent.putExtra("crop", "true");// aspectX , aspectY :宽高的比例intent.putExtra("aspectX", 1);intent.putExtra("aspectY", 1);// outputX , outputY : 裁剪图片宽高intent.putExtra("outputX", output_X);intent.putExtra("outputY", output_Y);intent.putExtra("return-data", true);startActivityForResult(intent, CODE_RESULT_REQUEST);}/** * 提取保存裁剪之后的图片数据,并设置头像部分的View */private void setImageToHeadView(Intent intent) {Bundle extras = intent.getExtras();if (extras != null) {Bitmap photo = extras.getParcelable("data");headImage.setImageBitmap(photo);}}/** * 检查设备是否存在SDCard的工具方法 */public static boolean hasSdcard() {String state = Environment.getExternalStorageState();if (state.equals(Environment.MEDIA_MOUNTED)) {// 有存储的SDCardreturn true;} else {return false;}}}

布局文件有三个组件:放置头像的ImageView,两个Button,其中一个Button触发从本地相册选取图片作为头像的操作时间;另外一个Button触发手机拍摄照片作为头像的操作事件。activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <ImageView        android:id="@+id/imageView"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:src="@drawable/ic_launcher" />    <Button        android:id="@+id/buttonLocal"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="本地相册选取头像" />    <Button        android:id="@+id/buttonCamera"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="手机拍照选取头像" /></LinearLayout>

更多相关文章

  1. Android实现调用系统相册和拍照的Demo示例
  2. 在Android中实现图片缩放和旋转
  3. Android撸一个转盘抽奖
  4. Android多点触控技术实战,自由地对图片进行缩放和移动
  5. Android切近实战(五)
  6. 关于android中的.9图(一)——如何画.9图
  7. 浅谈android中图片处理之图形变换特效Matrix(四)
  8. Android(安卓)拼接两个图片
  9. Android拼图游戏开发全纪录0

随机推荐

  1. mysql 找回误删表的数据办法
  2. 在for循环中生成的数字如何输出它们,就像
  3. 与MongoDB Atlas的Mongoose连接的最佳池
  4. 确定mysql中索引的状态
  5. Haskell FFI / C MPFR库包装器问题
  6. mouseover与mouseenter和mouseout与mouse
  7. mysql sql语句实现隐藏手机号码中间四位
  8. 使用移位运算符分割一个大小数
  9. 如何使用php通过AJAX从数据库中删除记录,
  10. 尝试将纬度和经度发布到数据库时,Android