android: 從相冊中選擇照片

雖然調用攝像頭拍照既方便又快捷,但並非每一次咱們都須要去當場拍一張照片的。 由於每一個人的手機相冊裏應該都會存有許許多多張照片,直接從相冊裏選取一張現有的照 片會比打開相機拍一張照片更加經常使用。一個優秀的應用程序應該將這兩種選擇方式都提供給 用戶,由用戶來決定使用哪種。下面咱們就來看一下,如何才能實現從相冊中選擇照片的 功能。android

仍是在 ChoosePicTest 項目的基礎上進行修改,首先編輯 activity_main.xml 文件,在佈局 中添加一個按鈕用於從相冊中選擇照片,代碼以下所示:ide

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"佈局

android:orientation="vertical" >xml

 

<Button android:id="@+id/take_photo" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Take Photo" />對象

 

<Button android:id="@+id/choose_from_album" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Choose From Album" />blog

 

<ImageView android:id="@+id/picture" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" />事件

 

</LinearLayout>圖片

而後修改 MainActivity 中的代碼,加入從相冊選擇照片的邏輯,代碼以下所示:內存

 

public class MainActivity extends Activity {開發

……

private Button chooseFromAlbum;

 

 

@Override

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

……

chooseFromAlbum = (Button) findViewById(R.id.choose_from_album);

chooseFromAlbum.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// 建立File對象,用於存儲選擇的照片

File outputImage = new File(Environment. getExternalStorageDirectory(), "output_image.jpg");

try {

if (outputImage.exists()) {

outputImage.delete();

}

outputImage.createNewFile();

} catch (IOException e) {

e.printStackTrace();

 }

imageUri = Uri.fromFile(outputImage);

Intent intent = new Intent("android.intent.action.

 

intent.setType("image/*"); intent.putExtra("crop", true);

intent.putExtra("scale", true);

intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);

startActivityForResult(intent, CROP_PHOTO);

 

});

}

……

}

能夠看到,在 Choose From Album 按鈕的點擊事件裏咱們一樣建立了一個 File 對象,用 於 存 儲 從相 冊 中 選 擇 的 圖 片。 然 後 構 建 出 一 個 Intent 對 象 , 並將 它 的 action 指 定 爲 android.intent.action.GET_CONTENT。接着給這個 Intent 對象設置一些必要的參數,包括是 否容許縮放和裁剪、圖片的輸出位置等。最後調用 startActivityForResult()方法,就能夠打開 相冊程序選擇照片了。

 

注意在調用 startActivityForResult() 方法的時候,咱們給第二個參數傳入的值仍然是CROP_PHOTO 常量,這樣的好處就是從相冊選擇好照片以後,會直接進入到 CROP_PHOTO

的 case 下將圖片顯示出來,這樣就能夠複用以前寫好的顯示圖片的邏輯,不用再編寫一遍了。 如今將程序從新運行到手機上,而後點擊一下 Choose From Album 按鈕,就會打開相冊

程序,如圖 8.16 所示。

圖   8.16

 

而後隨意選擇一張照片就能夠對它進行裁剪,如圖 8.17 所示。

圖   8.17

 

最後點擊完成,回到咱們程序的界面,就會看到裁剪後的圖片已經顯示出來了,如圖8.18 所示。

 

圖   8.18

 

調用攝像頭拍照以及從相冊中選擇照片是不少 Android 應用都會帶有的功能,如今你已 經將這兩種技術都學會了,未來在工做中若是須要開發相似的功能,相信你必定能輕鬆完成 吧。不過目前咱們的實現還不算完美,由於某些照片即便通過裁剪後體積仍然很大,直接加 載到內存中有可能會致使程序崩潰。更好的作法是根據項目的需求先對照片進行適當的壓縮,而後再加載到內存中。至於如何對照片進行壓縮,就要考驗你查閱資料的能力了,這裏 就再也不展開進行講解。

相關文章
相關標籤/搜索