Android編程實現(xiàn)調(diào)用系統(tǒng)圖庫與裁剪圖片功能
本文實例講述了Android編程實現(xiàn)調(diào)用系統(tǒng)圖庫與裁剪圖片功能。分享給大家供大家參考,具體如下:
在Android開發(fā)中,調(diào)用系統(tǒng)圖庫和裁剪照片是很常見的需求。相對于自己實現(xiàn)這種功能,直接調(diào)用系統(tǒng)具有諸多優(yōu)點,如不用考慮屏幕適配,不用擔心性能問題,等等。因此,對于一般的需求,建議直接調(diào)用系統(tǒng)的功能,簡便高效!
首先上效果圖:

一、只調(diào)用系統(tǒng)圖庫(不裁剪),返回用戶選擇的圖片。(只支持單選,如需多選則需要自己實現(xiàn),可參考Android編程實現(xiàn)仿QQ照片選擇器(按相冊分類顯示,多選添加)源碼。)
1.跳轉(zhuǎn)至系統(tǒng)圖庫頁面:
Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(i, SELECT_IMAGE);
2.在onActivityResult中接收系統(tǒng)圖庫返回的信息(也就是用戶選擇的照片)。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode != RESULT_OK || data == null) {
return;
}
//select an image
if (requestCode == SELECT_IMAGE) {
//get image path from uri
String imagePath = getImagePath(data.getData());
return;
}
}
private String getImagePath(Uri selectedImage) {
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String imagePath = cursor.getString(columnIndex);
cursor.close();
System.out.println("image path:" + imagePath);
return imagePath;
}
二、跳轉(zhuǎn)至系統(tǒng)圖庫,選擇照片,并裁剪。
1.跳轉(zhuǎn)至系統(tǒng)圖庫:
//select image via system gallery, crop and save the new image file.
public void selectImageAndCrop(View view) {
//After cropping, the image file will be stored here!
cacheFile = imageCacheFolder + File.separator + "cache_" + System.currentTimeMillis() + ".jpg";
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
intent.putExtra("crop", "true");
//width:height
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("output", Uri.fromFile(new File(cacheFile)));
intent.putExtra("outputFormat", "JPEG");
startActivityForResult(Intent.createChooser(intent, "Choose Image"), SELECT_IMAGE_CROP);
}
跳轉(zhuǎn)之前需要傳遞的數(shù)據(jù):
(1)crop:傳遞一個true,告訴系統(tǒng)需要裁剪。
(2)aspectX和aspectY:裁剪框的寬高比。
(3)output:需要傳遞一個由文件路徑cacheFile構(gòu)建的uri,用戶在圖庫頁面選擇照片之后會自動進入裁剪頁面,裁剪之后圖片會被保存在cacheFile這個位置。
裁剪完成之后,同樣會回調(diào)onActivityResult方法(resultCode為RESULT_OK),并且圖片會被保存在cacheFile這個位置,因此可以直接使用這個文件,例如將其設(shè)置為ImageView的資源。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode != RESULT_OK) {
return;
}
//select an image and crop
if (requestCode == SELECT_IMAGE_CROP) {
//compress the original image to save memory.
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inSampleSize = 4;
imageView.setImageBitmap(BitmapFactory.decodeFile(cacheFile, opt));
}
}
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android圖形與圖像處理技巧總結(jié)》、《Android開發(fā)入門與進階教程》、《Android調(diào)試技巧與常見問題解決方法匯總》、《Android基本組件用法總結(jié)》、《Android視圖View技巧總結(jié)》、《Android布局layout技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對大家Android程序設(shè)計有所幫助。
- Android實現(xiàn)拍照、選擇圖片并裁剪圖片功能
- Android裁剪圖片為圓形圖片的實現(xiàn)原理與代碼
- 解決Android從相冊中獲取圖片出錯圖片卻無法裁剪問題的方法
- Android實現(xiàn)從本地圖庫/相機拍照后裁剪圖片并設(shè)置頭像
- Android 7.0中拍照和圖片裁剪適配的問題詳解
- Android實現(xiàn)拍照及圖片裁剪(6.0以上權(quán)限處理及7.0以上文件管理)
- android文件上傳示例分享(android圖片上傳)
- Android使用post方式上傳圖片到服務器的方法
- Android實現(xiàn)本地上傳圖片并設(shè)置為圓形頭像
- Android實現(xiàn)圖片裁剪和上傳
相關(guān)文章
Android自定義SeekBar實現(xiàn)視頻播放進度條
這篇文章主要為大家詳細介紹了Android自定義SeekBar實現(xiàn)視頻播放進度條的相關(guān)資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03
Flutter仿微信通訊錄實現(xiàn)自定義導航條的示例代碼
某些頁面比如我們在選擇聯(lián)系人或者某個城市的時候需要快速定位到我們需要的選項,一般都會需要像微信通訊錄右邊有一個導航條一樣的功能,本文將利用Flutter實現(xiàn)這一效果,需要的可以參考一下2022-04-04
android隱式意圖激活自定義界面和系統(tǒng)應用界面的實例
下面小編就為大家?guī)硪黄猘ndroid隱式意圖激活自定義界面和系統(tǒng)應用界面的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06
Android ViewPager自定義輪播圖并解決播放沖突
這篇文章主要為大家詳細介紹了Android ViewPager自定義輪播圖并解決播放沖突,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09

