RxImagePicker 圖片選擇器
阿新 • • 發佈:2018-12-17
優點:
① rxjava2 實現讀取相簿和呼叫系統相機拍照,File - Uri - path 轉換和執行緒切換 ② 根據你設定的主題ui 圖片選擇介面和圖片預覽介面自適應 ③ 配置簡單,結果回撥方便(不用寫onActivityResult)相容7.0 fileprovider不用自己配置 ④ 載入圖片的框架自由選擇,Glide Pisco Freso 都可以 ⑤ 回撥結果可配置,File - Uri - path 需手動強轉
使用:
① 引入
//Add the JitPack repository to your build file allprojects { repositories { ... maven { url 'https://jitpack.io' } } } //Add the dependency dependencies { implementation 'com.github.woaigmz:RxImagePicker:0.0.4' }
② 使用:不提供許可權檢測 //根據設定的ResultType 在回撥裡手動轉換型別
requestPermissions(permissions, new PermissionListener() { @Override public void onGranted() { RxImagePicker .source(MainActivity.this, new ImageLoaderInterface<ImageView>() { @Override public void displayImage(Context context, String path, ImageView imageView, int width, int height, float scale) { ImageLoader.loadImageWithSize(context, imageView, path, width, height, scale); } }) .createFactory() .setGridColumn(3) .setTheme(R.style.AppTheme) .setPickedNum(9) .setResultType(ResultType.PATH) .onPicked(new ImagePickerResultListener() { @Override public void onPicked(Object o) { List<String> list = (List<String>) o; String path = list.get(0); ImageLoader.loadImageWithPath(MainActivity.this, iv, path); } @Override public void onPhotoTook(Object o) { Log.d("111", o.toString()); String path = (String) o; ImageLoader.loadImageWithPath(MainActivity.this, iv, path); } @Override public void onException(String msg) { Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show(); } }) .build(); } @Override public void onDenied(List<String> list) { } });
設計:
① UI :圖片選擇網格頁面和預覽選擇頁面 ImageChooseGridActivity/PreviewChooseActivity 通過 – ImageChooseUI這個類拿到配置資訊 ② Factory:ImagePickerFactory 通過建造者模式 初始化配置 ③ ImageLoaderInterface :對外提供圖片引擎適配介面 介面卡模式 ④ controller:ImageController Rxjava 資料處理地方,提供方法,供外界呼叫 ⑤ model:Counter 單例模式,儲存所有 Image 計算選擇的ImageList 類似於資料庫 ⑥ RxImagePicker