android手機拍照或選取相簿裡面的圖片

來源:互聯網
上載者:User

標籤:

three.xml:

<?xml version="1.0" encoding="utf-8"?><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>

ThreeActivity.class:

package com.example.day4_three;import java.io.File;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ImageView;import android.widget.Toast;import android.app.Activity;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 ThreeActivity extends Activity {    /* 頭像檔案 */  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.three);      headImage = (ImageView) findViewById(R.id.imageView);      Button buttonLocal = (Button) findViewById(R.id.buttonLocal);    buttonLocal.setOnClickListener(new 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;    }  }}

 

android手機拍照或選取相簿裡面的圖片

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.