html5中文学习网

您的位置: 首页 > android » 正文

Android手机拍照或选取图库图片作为头像_Android

[ ] 已经帮助:人解决问题
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的正方形。(生成bitmap貌似有时要报错?可试下把大小弄小点)  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;    }  }}
<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>

以上所述就是本文的全部内容了,希望大家能够喜欢。EfHHTML5中文学习网 - HTML5先行者学习网

(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助