1. 程式人生 > >RxImagePicker 圖片選擇器

RxImagePicker 圖片選擇器

優點:

① rxjava2 實現讀取相簿和呼叫系統相機拍照,File - Uri - path 轉換和執行緒切換 ② 根據你設定的主題ui 圖片選擇介面和圖片預覽介面自適應 ③ 配置簡單,結果回撥方便(不用寫onActivityResult)相容7.0 fileprovider不用自己配置 ④ 載入圖片的框架自由選擇,Glide Pisco Freso 都可以 ⑤ 回撥結果可配置,File - Uri - path 需手動強轉

takePhoto.gif pickImage.gif

使用:

① 引入

    //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) {

            }
        });

設計:

project.png

① UI :圖片選擇網格頁面和預覽選擇頁面 ImageChooseGridActivity/PreviewChooseActivity 通過 – ImageChooseUI這個類拿到配置資訊 ② Factory:ImagePickerFactory 通過建造者模式 初始化配置 ③ ImageLoaderInterface :對外提供圖片引擎適配介面 介面卡模式 ④ controller:ImageController Rxjava 資料處理地方,提供方法,供外界呼叫 ⑤ model:Counter 單例模式,儲存所有 Image 計算選擇的ImageList 類似於資料庫 ⑥ RxImagePicker

入口

謝謝:)for the dream