当前位置: 首页>后端>正文

小红书图片剪裁框架+微信图片选择器+超高清大图预览+自定义比例剪裁,支持UI自定义、支持跨进程回调

### 鍏充簬YImagePicker

[ ![Download](https://api.bintray.com/packages/yangpeixing/yimagepicker/androidx/images/download.svg?version=2.4.1) ](https://bintray.com/yangpeixing/yimagepicker/androidx/2.4.1/link)

- 鏀寔鏃犵紳鍒囨崲灏忕孩涔﹀壀瑁佹牱寮忓苟鑷畾涔塙I

- 鏀寔寰俊銆侀┈铚傜獫銆佺煡涔庣瓑澶氫釜涓嶅悓椋庢牸鏍峰紡瀹氬埗

- 鏀寔鍥剧墖鐩存帴棰勮鍜岀紪杈戦瑙堬紙鎺掑簭銆佸垹闄わ級

- 鏀寔鍗曞浘鑷畾涔夋瘮渚嬪壀瑁?/p>

- 鏀寔瑙嗛銆佸浘鐗囥€丟IF鍥剧瓑涓嶅悓绫诲瀷娣峰悎鍔犺浇

- 鏀寔瑙嗛鍥剧墖娣峰悎鍗曢€夋垨澶氶€?/p>

- 鏀寔楂樻竻棰勮瓒呴暱鍥俱€佽秴澶у浘锛屽浘鐗囨斁澶ф晥鏋滆儨杩囧井淇?/p>

- 灏忕孩涔﹀壀瑁佹牱寮忔敮鎸佽棰戦瑙?/p>

- 寰俊鏍峰紡鏀寔鎸囧畾鍗曚竴绫诲瀷閫夋嫨锛堝浘鐗囥€佽棰戯級

- 寰俊鏍峰紡鏀寔澶氭閫夋嫨鐘舵€佷繚瀛?/p>

- 寰俊鏍峰紡鏀寔鎸囧畾鏌愪簺濯掍綋鏂囦欢涓嶅彲閫夋嫨

- 閫夋嫨缁撴灉鐩存帴鍥炶皟锛屾嫆缁濋厤缃瓵ctivityForResult+requestCode锛屽嵆璋冪敤鍗冲鐞?/p>

- 杞婚噺绾э紝aar澶у皬涓嶈秴杩?00K锛屾棤so搴擄紝鏃犱换浣曠涓夋柟渚濊禆

- 鏀寔androidx鍜宻upport

- 姘镐箙缁存姢

### 寮曞叆渚濊禆

**androidx鐗堟湰锛?*

```java

implementation 'com.ypx.yimagepicker:androidx:2.4.2'

```

**support鐗堟湰锛?*

```java

implementation 'com.ypx.yimagepicker:support:2.4.2'

```

### 鏍稿績鍘熺悊

YImagePicker涓庝富椤圭洰閫氳繃presenter杩涜浜や簰涓庤В鑰︼紝presenter閲囩敤搴忓垪鍖栨帴鍙g殑鏂瑰紡瀹炵幇銆傚洖璋冮噰鐢ㄥ祵鍏ragment鐨勬柟寮忓疄鐜帮紝绫讳技浜嶨lide鎴朢xPermisson.鍘熺悊涓婅繕鏄娇鐢∣nActivityResult,浣嗘棤闇€鍐嶉厤缃畆equestCode骞朵笖鏀寔璺ㄨ繘绋嬪洖璋冦€?/p>

灏忕孩涔︽牱寮忛渶瑕佸疄鐜帮細ICropPickerBindPresenter

寰俊鏍峰紡闇€瑕佸疄鐜帮細IMultiPickerBindPresenter

[apk浣撻獙鍦板潃](https://www.pgyer.com/Wfhb)

### 鏁堟灉鍥鹃泦

- **demo鏁堟灉**

![demo鏁堟灉](https://app-screenshot.pgyer.com/image/view/app_screenshots/3957d904273e547143955ca993bbf7ae-528)

- **灏忕孩涔︽牱寮?*

![灏忕孩涔︽牱寮廬(https://app-screenshot.pgyer.com/image/view/app_screenshots/fc09bb8d2ac27b91820593430469cc17-528)

![灏忕孩涔︽牱寮廬(https://app-screenshot.pgyer.com/image/view/app_screenshots/87b43cb9ef8f40377bc3910b3ad3737b-528)

![灏忕孩涔︽牱寮廬(https://app-screenshot.pgyer.com/image/view/app_screenshots/daf41cb9f9a54c3c9879555ddf4ec8c8-528)

- **寰俊鏍峰紡**

![寰俊鏍峰紡](https://app-screenshot.pgyer.com/image/view/app_screenshots/fad19096a28cec65094f6120c154b47f-528)

![寰俊鏍峰紡](https://app-screenshot.pgyer.com/image/view/app_screenshots/21145d344498c57954704bde3e0e7dfc-528)

![寰俊鏍峰紡](https://app-screenshot.pgyer.com/image/view/app_screenshots/2cb198df6739d1a9f91d9ee60ec3c29f-528)

- **鑷畾涔夋牱寮?*

![鑷畾涔夋牱寮廬(https://app-screenshot.pgyer.com/image/view/app_screenshots/44b8fdecff62aa20eb51b4f54cfec30a-528)

![鑷畾涔夋牱寮廬(https://app-screenshot.pgyer.com/image/view/app_screenshots/57a62bcc84844400878fdb343cf762e8-528)

- **鑷畾涔夋瘮渚嬪壀瑁?*

![鑷畾涔夋瘮渚嬪壀瑁乚(https://app-screenshot.pgyer.com/image/view/app_screenshots/15483adb087360ff49e831cb988adce1-528)

![鑷畾涔夋瘮渚嬪壀瑁乚(https://app-screenshot.pgyer.com/image/view/app_screenshots/c32921bd346904cec77b7fea919afb56-528)

### 寰俊鍥剧墖閫夋嫨

鏀寔瑙嗛銆丟IF銆侀暱鍥鹃€夋嫨锛屾敮鎸佸崟寮犲姣斾緥鍓锛屾敮鎸佸鍥鹃瑙堛€佺紪杈戙€佷互鍙婅皟搴忥紝鏀寔鐩存帴鎷嶇収銆傝皟鐢ㄥ墠璇锋寜鐓emo瀹炵幇IMultiPickerBindPresenter 鎺ュ彛聽 聽 聽 聽 聽

#### 鍗曢€?澶氶€夆€斺€?鏀寔瑙嗛鍜屽浘鐗囧崟涓€閫夋嫨妯″紡

```java

//寰俊鏍峰紡澶氶€夛紝WXImgPickerPresenter涓虹敤鎴疯嚜瀹氫箟鐨勫井淇℃樉绀烘牱寮忥紝聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

// 浠ュ強涓€浜涗氦浜掗€昏緫锛屽疄鐜拌嚜IMultiPickerBindPresenter鎺ュ彛聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

ImagePicker.withMulti(new WXImgPickerPresenter())聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 .setMaxCount(9)//璁剧疆鏈€澶ч€夋嫨鏁伴噺聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 .setColumnCount(4)//璁剧疆鏄剧ず鍒楁暟聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 .showVideo(true)//璁剧疆鏄惁鍔犺浇瑙嗛聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 .showGif(true)//璁剧疆鏄惁鍔犺浇GIF聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 .showCamera(true)//璁剧疆鏄惁鏄剧ず鎷嶇収鎸夐挳锛堝湪鍒楄〃绗竴涓級聽 聽 聽 聽 聽

聽 聽 聽 聽 .showImage(true)//璁剧疆鏄惁鍔犺浇鍥剧墖

聽 聽 聽 聽 .setMaxVideoDuration(120000)//璁剧疆瑙嗛鍙€夋嫨鐨勬渶澶ф椂闀?/p>

聽 聽 聽 聽 //璁剧疆鍙兘閫夋嫨瑙嗛鎴栧浘鐗?/p>

聽 聽 聽 聽 .setSinglePickImageOrVideoType(true)

聽 聽 聽 聽 //璁剧疆鍙兘閫夋嫨涓€涓棰?/p>

聽 聽 聽 聽 .setVideoSinglePick(true)聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 //璁剧疆涓嬫閫夋嫨闇€瑕佸睆钄界殑鍥剧墖鎴栬棰戯紙绠€鍗曠偣灏辨槸涓嶅彲閲嶅閫夋嫨锛壜?聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 .setShieldList(new ArrayList<String>())聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 //璁剧疆涓嬫閫夋嫨闇€瑕佸甫鍏ョ殑鍥剧墖鍜岃棰戯紙绠€鍗曠偣灏辨槸璁板綍涓婃閫夋嫨鐨勫浘鐗囷紝鍙互鍙栨秷涔嬪墠閫夋嫨锛壜?聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 .setLastImageList(new ArrayList<String>())聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 //璋冪敤澶氶€壜?聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 .pick(this, new OnImagePickCompleteListener() {聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 聽 聽 @Override聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 聽 聽 public void onImagePickComplete(ArrayList<ImageItem> items) {聽 聽

聽 聽 聽 聽 聽 聽 聽 聽 //澶勭悊鍥炶皟鍥炴潵鐨勫浘鐗囦俊鎭紝涓荤嚎绋嬄?聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 聽 聽 }聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 });聽 聽

//Fragment璋冪敤锛毬?聽

MultiImagePickerFragment mFragment = ImagePicker.withMultiFragment(new WXImgPickerPresenter())聽 聽

聽 聽 聽 聽 聽 聽 聽 ...//鐪佺暐浠ヤ笂鑻ュ共灞炴€?/p>

聽 聽 聽 聽 聽 聽 聽 .pickWithFragment(new OnImagePickCompleteListener() {

聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 @Override

聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 public void onImagePickComplete(ArrayList<ImageItem> items) {

聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 //澶勭悊鍥炶皟鍥炴潵鐨勫浘鐗囦俊鎭紝涓荤嚎绋嬄?聽 聽 聽

聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 }

聽 聽 聽 聽 聽 聽 聽 聽 });

//---------澶栭儴Activity闇€瑕侀噸鍐欑殑鏂规硶------------聽 聽 聽 聽

@Override聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

public void onBackPressed() {聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 if (null != mFragment && mFragment.onBackPressed()) {聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 return;聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 }聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 super.onBackPressed();聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

}聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

@Override聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {聽

聽 聽 super.onActivityResult(requestCode, resultCode, data);聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 if (mFragment != null) {聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 mFragment.onTakePhotoResult(requestCode, resultCode);聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 }聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

}聽 聽 聽 聽 聽

});

```

#### 鍗曞紶鍓 鈥斺€?鏀寔鑷畾涔夊壀瑁佹瘮渚?/p>

```java

//寰俊鏍峰紡澶氶€夛紝WXImgPickerPresenter涓虹敤鎴疯嚜瀹氫箟鐨勫井淇℃樉绀烘牱寮忥紝聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

// 浠ュ強涓€浜涗氦浜掗€昏緫锛屽疄鐜拌嚜IMultiPickerBindPresenter鎺ュ彛聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

ImagePicker.withMulti(new WXImgPickerPresenter())聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 ...//鐪佺暐浠ヤ笂鎵€鏈夊叕鍏卞睘鎬?聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 .setCropRatio(1, 1)//璁剧疆鍓姣斾緥聽 1锛?聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 .cropSaveFilePath("鍓鍥剧墖淇濆瓨鍦板潃")

聽 聽 聽 聽 .cropRectMinMargin(0)//璁剧疆鍓杈规闂磋窛,鍗曚綅 px聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 //璋冪敤鍓聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 .crop(this, new OnImagePickCompleteListener() {聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 聽 聽 @Override聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 聽 聽 public void onImagePickComplete(ArrayList<ImageItem> items) {聽 聽

聽 聽 聽 聽 聽 聽 聽 聽 //澶勭悊鍥炶皟鍥炴潵鐨勫浘鐗囦俊鎭紝涓荤嚎绋嬄?聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 聽 聽 }聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 });聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

```

#### 棰勮 鈥斺€?鏀寔鏅€氶瑙堝拰缂栬緫棰勮

```java

聽 //棰勮鏁版嵁婧愶紝鍙帴鍙桝rrayList<String> 鍜孉rrayList<ImageItem> 涓ょ娉涘瀷聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

ArrayList<String> imageList = new ArrayList<>();聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

//榛樿閫夋嫨鐨刬ndex聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

int currentPos = 1;聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

//璋冪敤棰勮聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

ImagePicker.withMulti(new WXImgPickerPresenter())聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 //绗簩涓弬鏁颁负棰勮鍥剧墖鏁扮粍銆佺涓変釜鍙傛暟涓洪粯璁ら€変腑鐨刬ndex锛岀鍥涗釜鍙傛暟涓洪瑙堝洖璋冿紝聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 //濡傛灉绗洓涓弬鏁颁负null,鍒欎唬琛ㄦ棤闇€瀵归瑙堢殑鍥剧墖杩涜缂栬緫锛堣皟搴忋€佸垹闄ゆ搷浣滐級锛屽弽涔嬪彲浠ョ紪杈戦瑙堝浘聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 .preview(this, imageList, currentPos, new OnImagePickCompleteListener() {

聽 聽 聽 聽 聽 聽 @Override聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 聽 聽 public void onImagePickComplete(ArrayList<ImageItem> items) {聽 聽 聽 聽

聽 聽 聽 聽 聽 聽 聽 聽 //澶勭悊棰勮鍥炶皟鐨勬暟鎹?聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 聽 聽 }聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 });聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

```

#### 鎷嶇収

```java

聽 //鐩存帴璋冪敤鎷嶇収聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

ImagePicker.withMulti(new WXImgPickerPresenter()).takePhoto(this, new OnImagePickCompleteListener() {

聽 聽 @Override聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 public void onImagePickComplete(ArrayList<ImageItem> imageItems) {聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 //澶勭悊鎷嶇収鍥炶皟聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 }聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

});聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

```

#### 鑷畾涔塙I鍜宲resenter浜や簰 鈥斺€?鏀寔item鑷畾涔夊拰鏂囦欢澶瑰垪琛ㄥ脊鍏ユ柟鍚?/p>

```java

/**

* 浣滆€咃細yangpeixing on 2018/9/26 15:57

* 鍔熻兘锛氬井淇℃牱寮忓浘鐗囬€夋嫨鍣?/p>

*/

public class WXImgPickerPresenter implements IMultiPickerBindPresenter {聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 @Override聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 public void displayListImage(ImageView imageView, ImageItem item, int size) {聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 Glide.with(imageView.getContext()).load(item.path).into(imageView);聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 }聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 @Override聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 public void displayPerViewImage(ImageView imageView, String url) {聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 Glide.with(imageView.getContext()).load(url).into(imageView);聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 }聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 @Override聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 public PickerUiConfig getUiConfig(Context context) {聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 PickerUiConfig config = new PickerUiConfig();聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 //鏄惁娌夋蹈寮忕姸鎬佹爮锛岀姸鎬佹爮棰滆壊灏嗘牴鎹甌opBarBackgroundColor鎸囧畾锛屄?聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 // 骞跺姩鎬佹洿鏀圭姸鎬佹爮鍥炬爣棰滆壊聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 config.setImmersionBar(true);聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 //璁剧疆涓婚鑹猜?聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 config.setThemeColor(Color.parseColor("#09C768"));聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 //璁剧疆閫変腑鍜屾湭閫変腑鏃跺浘鏍嚶?聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 config.setSelectedIconID(R.mipmap.picker_wechat_select);聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 config.setUnSelectIconID(R.mipmap.picker_wechat_unselect);聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 //璁剧疆杩斿洖鍥炬爣浠ュ強杩斿洖鍥炬爣棰滆壊聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 config.setBackIconID(R.mipmap.picker_icon_back_black);聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 config.setBackIconColor(Color.BLACK);聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 //璁剧疆鏍囬鏍忚儗鏅壊鍜屽榻愭柟寮忥紝璁剧疆鏍囬鏍忔枃鏈鑹猜?聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 config.setTitleBarBackgroundColor(Color.parseColor("#F1F1F1"));聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 config.setTitleBarGravity(Gravity.START);聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 config.setTitleColor(Color.BLACK);聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 //璁剧疆鏍囬鏍忓彸涓婅瀹屾垚鎸夐挳閫変腑鍜屾湭閫変腑鏍峰紡锛屼互鍙婃枃瀛楅鑹猜?聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 int r = ViewSizeUtils.dp(context, 2);聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 config.setOkBtnSelectBackground(CornerUtils.cornerDrawable(Color.parseColor("#09C768"), r));聽 聽 聽 聽 聽

聽 聽 聽 聽 config.setOkBtnUnSelectBackground(CornerUtils.cornerDrawable(Color.parseColor("#B4ECCE"), r));聽 聽 聽 聽

聽 聽 聽 聽 config.setOkBtnSelectTextColor(Color.WHITE);聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 config.setOkBtnUnSelectTextColor(Color.parseColor("#50ffffff"));聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 config.setOkBtnText("瀹屾垚");聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 //璁剧疆閫夋嫨鍣ㄨ儗鏅壊聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 config.setPickerBackgroundColor(Color.WHITE);聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 //璁剧疆閫夋嫨鍣╥tem鑳屾櫙鑹猜?聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 config.setPickerItemBackgroundColor(Color.parseColor("#484848"));聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 //璁剧疆搴曢儴鏍忛鑹猜?聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 config.setBottomBarBackgroundColor(Color.parseColor("#333333"));聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 //璁剧疆鎷嶇収鎸夐挳鍥炬爣鍜岃儗鏅壊聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 config.setCameraIconID(R.mipmap.picker_ic_camera);聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 config.setCameraBackgroundColor(Color.parseColor("#484848"));聽

聽 聽 聽 //鏍囬鏍忔ā寮忥紝浠庢爣棰樻爮閫夋嫨鐩稿唽

聽 聽 聽 聽 config.setPickStyle(PickerUiConfig.PICK_STYLE_TITLE);

聽 聽 聽 聽 //璁剧疆閫夋嫨鍣ㄨ嚜瀹氫箟item鏍峰紡

聽 聽 聽 聽 config.setPickerItemView(new CustomPickerItem(context));聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 return config;聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 }聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 @Override聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 public void tip(Context context, String msg) {聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 }聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 @Override聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 public void imageItemClick(Context context, ImageItem imageItem, ArrayList<ImageItem> selectImageList,聽 聽

聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 ArrayList<ImageItem> allSetImageList, MultiGridAdapter adapter) {聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 tip(context, "鎴戞槸鑷畾涔夌殑鍥剧墖鐐瑰嚮浜嬩欢");聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 }聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

}聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

```

### 灏忕孩涔﹀浘鐗囧壀瑁侀€夋嫨聽 聽 聽

楂樹豢灏忕孩涔﹀浘鐗囧壀瑁佹鏋讹紝鏀寔瑙嗛浠ュ強澶氬浘鍓銆佹敮鎸乫ragment鏍峰紡渚靛叆

#### Activity鐩存帴璋冪敤

```java

//璋冪敤灏忕孩涔﹀壀瑁佸洖璋冪殑imageItems閲岋紝imageItem.path鏄師鍥撅紝聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

// imageItem.getCropUrl()鎵嶆槸鍓鍚庣殑鍥剧墖聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

ImagePicker.withCrop(new RedBookCropPresenter())聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 //璁剧疆绗竴寮犲浘淇℃伅锛屽彲涓簄ull,璁剧疆浠ュ悗锛岄€夋嫨鍣ㄤ細榛樿聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 // 浠ョ涓€寮犲浘鐗囩殑鍓鏂瑰紡鍓鍚庨潰鎵€鏈夌殑鍥剧墖聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 .setFirstImageItem(new ImageItem())聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 .setFirstImageUrl("杩欓噷濉叆澶栭儴宸茬粡閫夋嫨鐨勭涓€寮犲浘鐗囧湴鍧€url")聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 //璁剧疆瑕侀€夋嫨鐨勬渶澶ф暟聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 .setMaxCount(count)聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 //璁剧疆鏄惁鍔犺浇瑙嗛聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 .showVideo(true)聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 //璁剧疆绗竴涓猧tem鏄惁鎷嶇収聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 .showCamera(true)聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 //璁剧疆鍓瀹屽浘鐗囦繚瀛樿矾寰劼?聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 .setCropPicSaveFilePath("鍥剧墖淇濆瓨璺緞")聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 .pick(this, new OnImagePickCompleteListener() {聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 聽 聽 @Override聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 聽 聽 public void onImagePickComplete(ArrayList<ImageItem> imageItems) {

聽 聽 聽 聽 聽 聽 聽 聽 //璋冪敤灏忕孩涔﹀壀瑁佸洖璋冪殑imageItems閲岋紝imageItem.path鏄師鍥撅紝聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 聽 聽 聽 聽 // imageItem.getCropUrl()鎵嶆槸鍓鍚庣殑鍥剧墖聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 聽 聽 聽 聽 //TODO鍓鍥炶皟聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 聽 聽 }聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 });聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

```

#### Fragment宓屽璋冪敤

```java

//璋冪敤灏忕孩涔﹀壀瑁佸洖璋冪殑imageItems閲岋紝imageItem.path鏄師鍥撅紝聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

// imageItem.getCropUrl()鎵嶆槸鍓鍚庣殑鍥剧墖聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

ImagePickAndCropFragment fragment = ImagePicker.withCropFragment(new RedBookCropPresenter())聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 //...鐪佺暐浠ヤ笂灞炴€?聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 .pickWithFragment(new OnImagePickCompleteListener() {

聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 @Override

聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 public void onImagePickComplete(ArrayList<ImageItem> items) {

聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 //TODO 鍥剧墖鍓瀹屽洖璋?涓荤嚎绋?/p>

聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 }

聽 聽 聽 聽 聽 聽 聽 聽 });聽 聽

//---------澶栭儴Activity闇€瑕侀噸鍐欑殑鏂规硶------------聽 聽 聽 聽

@Override聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

public void onBackPressed() {聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 if (null != mFragment && mFragment.onBackPressed()) {聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 return;聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 }聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 super.onBackPressed();聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

}聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

@Override聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {聽

聽 聽 super.onActivityResult(requestCode, resultCode, data);聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 if (mFragment != null) {聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 聽 聽 mFragment.onTakePhotoResult(requestCode, resultCode);聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

聽 聽 }聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

}聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽

```

#### 鑷畾涔塙I鍜孭resenter浜や簰

```java

/**

- Description: 灏忕孩涔︽牱寮忔鏋舵暟鎹粦瀹?/p>

- <p>

- Author: peixing.yang

- Date: 2019/2/21

*/

public class RedBookCropPresenter implements ICropPickerBindPresenter {

聽 聽 @Override

聽 聽 public void displayListImage(ImageView imageView, ImageItem item, int size) {

聽 聽 聽 聽 Glide.with(imageView.getContext()).load(item.path).into(imageView);

聽 聽 }

聽 聽 /**

聽 聽 * 鍔犺浇鍓鍖哄煙閲岀殑鍥剧墖

聽 聽 *

聽 聽 * @param imageView imageView

聽 聽 * @param item聽 聽 聽 褰撳墠鍥剧墖淇℃伅

聽 聽 */

聽 聽 @Override

聽 聽 public void displayCropImage(ImageView imageView, ImageItem item) {

聽 聽 聽 聽 Glide.with(imageView.getContext()).load(item.path)

聽 聽 聽 聽 聽 聽 聽 聽 .apply(new RequestOptions().format(DecodeFormat.PREFER_ARGB_8888))

聽 聽 聽 聽 聽 聽 聽 聽 .into(imageView);

聽 聽 }

聽 聽 @Override

聽 聽 public CropUiConfig getUiConfig(Context context) {

聽 聽 聽 聽 CropUiConfig config = new CropUiConfig();

聽 聽 聽 聽 //璁剧疆涓婚鑹诧紝鍖呭惈閫変腑鏍峰紡鐨勫渾褰㈣儗鏅壊鍜岃竟妗嗚壊

聽 聽 聽 聽 config.setThemeColor(Color.RED);

聽 聽 聽 聽 //璁剧疆item鏈€変腑鍥炬爣

聽 聽 聽 聽 config.setUnSelectIconID(R.mipmap.picker_icon_unselect);

聽 聽 聽 聽 //璁剧疆鐩告満鍥炬爣

聽 聽 聽 聽 config.setCameraIconID(R.mipmap.picker_ic_camera);

聽 聽 聽 聽 //璁剧疆杩斿洖鍥炬爣

聽 聽 聽 聽 config.setBackIconID(R.mipmap.picker_icon_close_black);

聽 聽 聽 聽 //璁剧疆鍓鍖哄煙鑷€傚簲鍥炬爣

聽 聽 聽 聽 config.setFitIconID(R.mipmap.picker_icon_fit);

聽 聽 聽 聽 //璁剧疆鍓鍖哄煙鍏呮弧鍥炬爣

聽 聽 聽 聽 config.setFullIconID(R.mipmap.picker_icon_full);

聽 聽 聽 聽 //璁剧疆鐣欑櫧鍥炬爣

聽 聽 聽 聽 config.setGapIconID(R.mipmap.picker_icon_haswhite);

聽 聽 聽 聽 //璁剧疆濉厖鍥炬爣

聽 聽 聽 聽 config.setFillIconID(R.mipmap.picker_icon_fill);

聽 聽 聽 聽 //璁剧疆瑙嗛鏆傚仠鍥炬爣

聽 聽 聽 聽 config.setVideoPauseIconID(R.mipmap.video_play_small);

聽 聽 聽 聽 //璁剧疆杩斿洖鎸夐挳棰滆壊

聽 聽 聽 聽 config.setBackIconColor(Color.WHITE);

聽 聽 聽 聽 //璁剧疆鍓鍖哄煙棰滆壊

聽 聽 聽 聽 config.setCropViewBackgroundColor(Color.parseColor("#111111"));

聽 聽 聽 聽 //璁剧疆鎷嶇収鍥炬爣鑳屾櫙鑹?/p>

聽 聽 聽 聽 config.setCameraBackgroundColor(Color.BLACK);

聽 聽 聽 聽 //璁剧疆鏍囬鏍忚儗鏅壊

聽 聽 聽 聽 config.setTitleBarBackgroundColor(Color.BLACK);

聽 聽 聽 聽 //璁剧疆涓嬩竴姝ユ寜閽€変腑鏂囧瓧棰滆壊

聽 聽 聽 聽 config.setNextBtnSelectedTextColor(Color.WHITE);

聽 聽 聽 聽 //璁剧疆涓嬩竴姝ユ寜閽湭閫変腑鏂囧瓧棰滆壊

聽 聽 聽 聽 config.setNextBtnUnSelectTextColor(Color.WHITE);

聽 聽 聽 聽 //璁剧疆鏍囬鏂囧瓧棰滆壊

聽 聽 聽 聽 config.setTitleTextColor(Color.WHITE);

聽 聽 聽 聽 //璁剧疆item鍒楄〃鑳屾櫙鑹?/p>

聽 聽 聽 聽 config.setGridBackgroundColor(Color.BLACK);

聽 聽 聽 聽 //璁剧疆涓嬩竴姝ユ寜閽湭閫変腑鏃惰儗鏅痙rawable

聽 聽 聽 聽 config.setNextBtnUnSelectBackground(PCornerUtils.cornerDrawable(Color.parseColor("#B0B0B0"), PViewSizeUtils.dp(context, 30)));

聽 聽 聽 聽 //璁剧疆涓嬩竴姝ユ寜閽€変腑鏃惰儗鏅痙rawable

聽 聽 聽 聽 config.setNextBtnSelectedBackground(PCornerUtils.cornerDrawable(Color.RED, PViewSizeUtils.dp(context, 30)));

聽 聽 聽 聽 //璁剧疆鏄惁鏄剧ず涓嬩竴姝ユ暟閲忔彁绀?/p>

聽 聽 聽 聽 config.setShowNextCount(false);

聽 聽 聽 聽 //璁剧疆涓嬩竴姝ユ寜閽枃瀛?/p>

聽 聽 聽 聽 config.setNextBtnText("涓嬩竴姝?);

聽 聽 聽 聽 return config;

聽 聽 }

聽 聽 /**

聽 聽 * 閫夋嫨瓒呰繃鏁伴噺闄愬埗鎻愮ず

聽 聽 *

聽 聽 * @param context聽 聽 涓婁笅鏂?/p>

聽 聽 * @param maxCount聽 鏈€澶ф暟閲?/p>

聽 聽 * @param defaultTip 榛樿鎻愮ず鏂囨湰 鈥滄渶澶氶€夋嫨maxCount寮犲浘鐗団€?/p>

聽 聽 */

聽 聽 @Override

聽 聽 public void overMaxCountTip(Context context, int maxCount, String defaultTip) {

聽 聽 聽 聽 if (context == null) {

聽 聽 聽 聽 聽 聽 return;

聽 聽 聽 聽 }

聽 聽 聽 聽 AlertDialog.Builder builder = new AlertDialog.Builder(context);

聽 聽 聽 聽 builder.setMessage(defaultTip);

聽 聽 聽 聽 builder.setPositiveButton(com.ypx.imagepicker.R.string.picker_str_isee,

聽 聽 聽 聽 聽 聽 聽 聽 new DialogInterface.OnClickListener() {

聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 @Override

聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 public void onClick(DialogInterface dialogInterface, int i) {

聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 dialogInterface.dismiss();

聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 }

聽 聽 聽 聽 聽 聽 聽 聽 });

聽 聽 聽 聽 AlertDialog dialog = builder.create();

聽 聽 聽 聽 dialog.show();

聽 聽 }

聽 聽 /**

聽 聽 * 鍦ㄥ崟閫夎棰戦噷锛岀偣鍑昏棰慽tem浼氳Е鍙戞鍥炶皟

聽 聽 *

聽 聽 * @param activity聽 椤甸潰

聽 聽 * @param imageItem 褰撳墠閫変腑瑙嗛

聽 聽 */

聽 聽 @Override

聽 聽 public void clickVideo(Activity activity, ImageItem imageItem) {

聽 聽 聽 聽 Toast.makeText(activity, imageItem.path, Toast.LENGTH_SHORT).show();

聽 聽 }

}

```

### 涓嬩釜鐗堟湰鎺掓湡

鏃堕棿锛?019骞?2鏈堝乏鍙?/p>

1. 瑙嗛棰勮妗嗘灦鍒囨崲锛堝悙妲斤細瀹樻柟videoView澶毦鐢ㄤ簡~~/(銊抩銊?/~~锛?/p>

2. 鍥剧墖鍓鏀寔鏃嬭浆

3. 鏀寔JPEG銆丳NG銆丟IF銆丅MP銆乄EBP銆丮PEG銆丮P4銆丵UICKTIME銆乀HREEGPP銆乀HREEGPP2銆丮KV銆乄EBM銆乀S銆丄VI绛夊浘鐗囪棰戞枃浠舵牸寮忔贩鍚堝姞杞芥垨鎸囧畾鍔犺浇

鏈簱鏉ユ簮浜巑ars App,鎯宠浣撻獙鍩庡競鏈€鏂扮殑鍚冨枬鐜╀箰锛屾杩庤鑰呬笅杞戒綋楠宮ars!

浣滆€咃細[calorYang](https://blog.csdn.net/qq_16674697)

閭锛?13930500@qq.com

Q Q: 313930500

寰俊锛歝alor0616

**閬囧埌闂鍒粫璺紝QQ寰俊鐩存帴鍛紐 鎮ㄧ殑star灏辨槸鎴戝墠杩涚殑鍔ㄥ姏~馃尮**


https://www.xamrdz.com/backend/35p1994391.html

相关文章: