Awesome Open Source
Awesome Open Source

RxGalleryFinal

功能描述(JDK1.8)

RxGalleryFinal是一个android图片/视频文件选择器。其支持多选、单选、拍摄和裁剪,主题可自定义,无强制绑定第三方图片加载器。

版本描述

History Issues

History Version

待完善

1.视频选择器的回调
2.卡顿问题,可在 Issues 里搜索: #130 【精】觉得卡顿的点我

gradle

    New : compile 'cn.finalteam.rxgalleryfinal:library:1.1.3' -> 紧急修复bug .
    (Fix #191, add video)

参考:History Version

1.1.2 特性

  • 修复相关bug
  • Fix #175 #178

1.1.1 特性

  • 修复相关bug
  • #170,#165 ,#167 and fix Image No such file or directory
  • 更新Sample代码

1.0.9 特性

  • 修复相关bug - #160
  • 增加UCROP的设置
  • 更新Sample代码
  • RxJava升级

使用

下载或添加依赖

implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.exifinterface:exifinterface:1.1.0'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'io.reactivex.rxjava2:rxjava:2.2.15'
implementation 'com.github.yalantis:ucrop:2.2.4'

//支持以下主流图片加载器,开发者自行选择
implementation 'com.squareup.picasso:picasso:2.71828'
implementation 'com.facebook.fresco:fresco:2.0.0'
implementation 'com.facebook.fresco:animated-gif:2.0.0'
implementation 'com.github.bumptech.glide:glide:4.10.0'
implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'

配置manifest

截图:

image

  • 提供了相关的Api

  • 请查看MainActivity的示例代码 查看 Sample 代码

         //自定义方法的使用
         onClickZDListener();
         //调用图片选择器Api
         onClickSelImgListener();
         //调用视频选择器Api
         onClickSelVDListener();
         //调用裁剪Api
         onClickImgCropListener();
     		//手动打开日志。
    	 	ModelUtils.setDebugModel(true);
    
  • 这里可以配置主题

image

Theme

配置Theme请查看sample下的 xml-> TestTheme..
  • Code

      //自定义方法的单选
      RxGalleryFinal
      .with(context)
      .image()
      .radio()
      .crop()
      .imageLoader(ImageLoaderType.GLIDE)
      .subscribe(new RxBusResultSubscriber<ImageRadioResultEvent>() {
          @Override
          protected void onEvent(ImageRadioResultEvent imageRadioResultEvent) throws Exception {
              //图片选择结果
              .....
          }
      })
      .openGallery();
    

	//自定义方法的多选
	RxGalleryFinal.with(MainActivity.this)
	.image()
	.multiple()
	.maxSize(8)
	.imageLoader(ImageLoaderType.UNIVERSAL)
	.subscribe(new RxBusResultSubscriber<ImageMultipleResultEvent>() {
	       @Override
	       protected void onEvent(ImageMultipleResultEvent imageMultipleResultEvent) throws Exception {
	          toast("已选择" + imageMultipleResultEvent.getResult().size() + "张图片");
	       }
	       @Override
	       public void onCompleted() {
	       super.onCompleted();
	           Toast.makeText(getBaseContext(), "OVER", Toast.LENGTH_SHORT).show();
	       }
	}).openGallery();

	 //得到图片多选的事件
	 RxGalleryListener.getInstance().setMultiImageCheckedListener(new IMultiImageCheckedListener() {
	       @Override
	       public void selectedImg(Object t, boolean isChecked) {
	            //这个主要点击或者按到就会触发,所以不建议在这里进行Toast
	       }
	       @Override
	       public void selectedImgMax(Object t, boolean isChecked, int maxSize) {
	           toast("你最多只能选择" + maxSize + "张图片");
	       }
	});

	 //注解诠释
	 RxGalleryFinal.with(context)
	      .image()//图片
	      .radio()//单选
	      .crop()//裁剪
	      .video()//视频
	      .imageLoader(ImageLoaderType.GLIDE)
	      //里面可以选择主流图片工具  PICASSO  GLIDE  FRESCO UNIVERSAL(ImageLoader)
	      .subscribe(rxBusResultSubscriber)
	      .openGallery();

    //调用裁剪.RxGalleryFinalApi.getModelPath()为默认的输出路径
    RxGalleryFinalApi.cropScannerForResult(MainActivity.this, RxGalleryFinalApi.getModelPath(), inputImg);

//获取和设置 保存路径
RxGalleryFinalApi.getImgSaveRxCropDirByFile();//得到裁剪路径
RxGalleryFinalApi.getImgSaveRxCropDirByStr();//得到裁剪路径
RxGalleryFinalApi.getImgSaveRxDirByFile();//得到图片路径
RxGalleryFinalApi.getImgSaveRxCropDirByStr();//得到图片路径

//获取和设置 保存路径
//…… setImgSaveXXXXX().
//图片自动会存储到下面,裁剪会自动生成路径;也可以手动设置裁剪的路径;
RxGalleryFinalApi.setImgSaveRxSDCard("dujinyang");

    //自定义裁剪
   rx.cropAspectRatioOptions(0, new AspectRatio("3:3",30, 10))
   .crop()
   .openGallery();

  //4.演示 单选裁剪 并且增加回掉 (裁剪必须在open之前)
  RxGalleryFinalApi.getInstance(this)
     .onCrop(true)//是否裁剪
     .openGalleryRadioImgDefault(new RxBusResultSubscriber() {
             @Override
             protected void onEvent(Object o) throws Exception {
                  Logger.i("只要选择图片就会触发");
             }
      })
     .onCropImageResult(new IRadioImageCheckedListener() {
             @Override
             public void cropAfter(Object t) {
                  Logger.i("裁剪完成");
             }

             @Override
             public boolean isActivityFinish() {
                  Logger.i("返回false不关闭,返回true则为关闭");
                  return true;
             }
     });
  • 添加权限

      <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
      <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    
  • 注册activity

      <application
          ...
          android:theme="@style/Theme_Light">
      <activity
          android:name="cn.finalteam.rxgalleryfinal.ui.activity.MediaActivity"
          android:screenOrientation="portrait"
          android:exported="true"
          android:theme="@style/Theme_Light.Default"/>
      <activity
          android:name="com.yalantis.ucrop.UCropActivity"
          android:screenOrientation="portrait"
          android:theme="@style/Theme_Light.Default"/>
      </application
    

混淆配置

#1.support-v7-appcompat
-keep public class android.support.v7.widget.** { *; }
-keep public class android.support.v7.internal.widget.** { *; }
-keep public class android.support.v7.internal.view.menu.** { *; }

-keep public class * extends android.support.v4.view.ActionProvider {
    public <init>(android.content.Context);
}

#2.rx
-dontwarn io.reactivex.**
-keep io.reactivex.**
-keepclassmembers class io.reactivex.** { *; }

#3.retrolambda
-dontwarn java.lang.invoke.*

#4.support-v4
-keep class android.support.v4.** { *; }
-keep interface android.support.v4.** { *; }

#5.ucrop
-dontwarn com.yalantis.ucrop**
-keep class com.yalantis.ucrop** { *; }
-keep interface com.yalantis.ucrop** { *; }

#6.photoview
-keep class uk.co.senab.photoview** { *; }
-keep interface uk.co.senab.photoview** { *; }

#7.rxgalleryfinal
-keep class cn.finalteam.rxgalleryfinal.ui.widget** { *; }

-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}
-keepclassmembers class **.R$* {
    public static <fields>;
}

-keepattributes *Annotation*
-keepclasseswithmembernames class * {
    native <methods>;
}
-keepclassmembers public class * extends android.view.View {
   void set*(***);
   *** get*();
}

Q&A

  • 1、出现图片倒立问题,如何解决
  • 2、如何压缩图片
  • 3、Android 7.0闪退
  • 4、授权说明

联系

如果有紧急事件可联系作者或加Q群:
- Q群号: 218801658
- Q群号: 246231638

Wiki


有兴趣的可以关注【Python2048】 公众号
分享技术、灰色产业、职业规划、赚钱之道、逆向破解等趣事……


Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
Java (411,723
Bug (13,217
Chinese (6,477
Gallery (6,182
Rxjava (4,217
Japanese (4,054
Rx (2,586
Image Cropper (282
Du (25