像微信、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; @OverrIDe protected 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() { @OverrIDe public voID onClick(VIEw v) { choseheadImageFromgallery(); } }); button buttonCamera = (button) findVIEwByID(R.ID.buttonCamera); buttonCamera.setonClickListener(new VIEw.OnClickListener() { @OverrIDe public 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); } @OverrIDe protected 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)) { // 有存储的SDCard return true; } else { return false; } }}
布局文件有三个组件:放置头像的ImageVIEw,两个button,其中一个button触发从本地相册选取图片作为头像的 *** 作时间;另外一个button触发手机拍摄照片作为头像的 *** 作事件。
activity_main.xml:
@H_419_24@<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>以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
总结以上是内存溢出为你收集整理的Android通过手机拍照或从本地相册选取图片设置头像全部内容,希望文章能够帮你解决Android通过手机拍照或从本地相册选取图片设置头像所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)