在開發Android應用程序的過程中,經常需要使用到圖片選擇的功能,但是系統自帶的圖片選擇器功能較為單一,不能滿足我們更加複雜的需求。為此,網上有很多開源的圖片選擇庫,其中Matisse庫是其中備受矚目的。Matisse庫允許你輕鬆地選取圖片、視頻、音頻文件,支持圖片預覽、裁剪等操作,使用了MVP和RxJava的設計模式,代碼優美簡潔,使得圖片選擇變得更加簡單。本文就從各個方面闡述Matisse庫的特點和具體實現。
一、引入Matisse庫
要使用Matisse庫,首先我們需要在項目的build.gradle中加入依賴:
dependencies { implementation 'com.zhihu.android:matisse:0.5.2-beta3' }
此外Matisse庫同時也依賴了其他一些庫,我們還需要在項目的build.gradle中加入以下依賴:
dependencies { implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support:recyclerview-v7:28.0.0' implementation 'com.android.support:design:28.0.0' implementation 'io.reactivex.rxjava2:rxjava:2.1.9' implementation 'io.reactivex.rxjava2:rxandroid:2.0.1' }
二、使用Matisse庫選擇圖片
使用Matisse庫選取圖片十分簡單,只需要在需要打開圖片選擇器的Activity中進行如下調用:
Matisse.from(MainActivity.this) .choose(MimeType.allOf()) // 選擇要添加的文件種類,比如圖片、視頻等 .countable(true) // 顯示選擇照片的數量 .maxSelectable(9) // 最大選擇數量 .gridExpectedSize(getResources().getDimensionPixelSize(R.dimen.grid_expected_size)) // 設置展示縮略圖大小 .restrictOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) // 屏幕方向 .thumbnailScale(0.85f) // 縮略圖比例 .imageEngine(new GlideEngine()) // 使用哪個圖片載入引擎 .forResult(REQUEST_CODE_CHOOSE); // 請求代碼
其中GlideEngine是一個用來載入圖片的開源庫,它需要在app/build.gradle中進行依賴:
dependencies { implementation 'com.github.bumptech.glide:glide:3.7.0' }
選擇完成後,Matisse庫返回給我們的是選中圖片的Uri集合,我們可以在onActivityResult方法中進行處理:
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE_CHOOSE && resultCode == RESULT_OK) { mSelected = Matisse.obtainResult(data); // 獲取選擇的圖片Uri集合 mAdapter.setData(mSelected); // 將選中的圖片顯示在RecyclerView上 } }
三、裁剪圖片
除了可以使用Matisse庫進行圖片選擇外,還可以使用它來進行圖片的裁剪,只需要在選擇圖片時加入以下代碼:
.choose(MimeType.ofImage()) // 僅選擇圖片 .showCrop(true) // 開啟裁剪功能 .cropOptions(new CropOptions.Builder().setAspectX(1).setAspectY(1).build()) // 裁剪的寬高比例 .maxSelectable(1) // 僅可選一張圖片 .forResult(REQUEST_CODE_CHOOSE);
然後在onActivityResult方法中處理裁剪後的圖片:
if (requestCode == REQUEST_CODE_CHOOSE && resultCode == RESULT_OK) { if (Matisse.obtainCropResult(data) != null) { mSelected = Matisse.obtainCropResult(data); // 獲取裁剪後的圖片Uri // 將裁剪後的圖片顯示在ImageView上 mIvSelected.setImageURI(mSelected.get(0)); } }
四、自定義主題風格
Matisse庫還允許我們自定義選擇器的主題風格,只需在styles.xml文件中進行如下定義:
@color/colorPrimary
然後在選擇圖片時使用該主題即可:
Matisse.from(MainActivity.this) .theme(R.style.MyMatisseTheme) // 使用自定義主題 ... .forResult(REQUEST_CODE_CHOOSE);
五、使用Matisse庫實現圖片的預覽
Matisse庫除了提供圖片選擇和裁剪功能外,還可以幫助我們實現圖片的預覽,預覽會將選擇的圖片按照順序顯示出來,用戶可以滑動圖片進行預覽。使用Matisse庫進行圖片的預覽十分方便,只需要在選擇圖片的過程中加入以下代碼:
.choose(MimeType.allOf()) // 選擇要添加的文件種類,比如圖片、視頻等 .countable(true) // 顯示選擇照片的數量 .maxSelectable(9) // 最大選擇數量 .gridExpectedSize(getResources().getDimensionPixelSize(R.dimen.grid_expected_size)) // 設置展示縮略圖大小 .previewEnable(true) // 開啟圖片預覽 .forResult(REQUEST_CODE_CHOOSE); // 請求代碼
然後在onActivityResult方法中處理預覽:
if (requestCode == REQUEST_CODE_CHOOSE && resultCode == RESULT_OK) { if (data != null) { mSelected = Matisse.obtainResult(data); // 獲取選中的圖片Uri集合 mAdapter.setData(mSelected); // 將選中的圖片顯示在RecyclerView上 } }
六、總結
在本文中,我們詳細介紹了如何使用Matisse庫來實現Android應用程序的圖片選擇功能。我們介紹了Matisse庫的依賴、使用方法、裁剪圖片、自定義主題風格和圖片預覽等方面。Matisse庫是一款使用簡單、功能豐富、代碼優美的圖片選擇器,可以很好地解決開發者在開發過程中的圖片選擇問題。
原創文章,作者:YGKY,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/135868.html