{"id":15025380,"url":"https://github.com/finalteam/rxgalleryfinal","last_synced_at":"2025-05-15T02:06:56.958Z","repository":{"id":43597248,"uuid":"56817418","full_name":"FinalTeam/RxGalleryFinal","owner":"FinalTeam","description":"图片选择库，单选/多选、拍照、裁剪、压缩，自定义。包括视频选择和录制。","archived":false,"fork":false,"pushed_at":"2022-03-12T04:00:10.000Z","size":21767,"stargazers_count":2822,"open_issues_count":151,"forks_count":509,"subscribers_count":72,"default_branch":"master","last_synced_at":"2025-05-15T02:06:54.176Z","etag":null,"topics":["android","du","finalteam","gallery","galleryfinal","history","image","imagecrop","java","karl-dujinyang","pengjianbo","photo","rx","rxgalleryfinal","sheep0704","urcop","video"],"latest_commit_sha":null,"homepage":"https://github.com/FinalTeam/RxGalleryFinal","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/FinalTeam.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-04-22T01:41:15.000Z","updated_at":"2025-03-20T06:45:12.000Z","dependencies_parsed_at":"2022-09-26T16:20:17.668Z","dependency_job_id":null,"html_url":"https://github.com/FinalTeam/RxGalleryFinal","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FinalTeam%2FRxGalleryFinal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FinalTeam%2FRxGalleryFinal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FinalTeam%2FRxGalleryFinal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FinalTeam%2FRxGalleryFinal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FinalTeam","download_url":"https://codeload.github.com/FinalTeam/RxGalleryFinal/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254259383,"owners_count":22040820,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","du","finalteam","gallery","galleryfinal","history","image","imagecrop","java","karl-dujinyang","pengjianbo","photo","rx","rxgalleryfinal","sheep0704","urcop","video"],"created_at":"2024-09-24T20:02:14.212Z","updated_at":"2025-05-15T02:06:56.916Z","avatar_url":"https://github.com/FinalTeam.png","language":"Java","readme":"# RxGalleryFinal\n\n\n## 功能描述（JDK1.8）\n\n   RxGalleryFinal是一个android图片/视频文件选择器。其支持多选、单选、拍摄和裁剪，主题可自定义，无强制绑定第三方图片加载器。\n\n   * [English](https://github.com/FinalTeam/RxGalleryFinal/blob/master/README_English.md)\n   * [Japanese](https://github.com/FinalTeam/RxGalleryFinal/blob/master/README_Japanese.md)\n   * [Chinese](https://github.com/FinalTeam/RxGalleryFinal)\n\n## 版本描述\n\n[History Issues](https://github.com/FinalTeam/RxGalleryFinal/wiki/RxGalleryFinal-Issues)\n\n[History Version](https://github.com/FinalTeam/RxGalleryFinal/wiki/RxGalleryFinal-Version)\n\n\n\n### 待完善\n\n    1.视频选择器的回调\n    2.卡顿问题，可在 Issues 里搜索： #130 【精】觉得卡顿的点我\n\n### gradle\n\n\t    New : compile 'cn.finalteam.rxgalleryfinal:library:1.1.3' -\u003e 紧急修复bug .\n\t    (Fix #191, add video)\n\n 参考：[History Version](https://github.com/FinalTeam/RxGalleryFinal/wiki/RxGalleryFinal-Version)\n\n### 1.1.2 特性\n\n * 修复相关bug\n * Fix #175 #178\n\n### 1.1.1 特性\n\n * 修复相关bug\n * #170,#165 ,#167 and fix Image No such file or directory\n * 更新Sample代码\n\n### 1.0.9 特性\n\n * 修复相关bug -  #160\n * 增加UCROP的设置\n * 更新Sample代码\n * RxJava升级\n\n## 使用\n### 下载或添加依赖\n\n    implementation 'androidx.appcompat:appcompat:1.1.0'\n    implementation 'androidx.recyclerview:recyclerview:1.1.0'\n    implementation 'androidx.exifinterface:exifinterface:1.1.0'\n    implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'\n    implementation 'io.reactivex.rxjava2:rxjava:2.2.15'\n    implementation 'com.github.yalantis:ucrop:2.2.4'\n    \n    //支持以下主流图片加载器，开发者自行选择\n    implementation 'com.squareup.picasso:picasso:2.71828'\n    implementation 'com.facebook.fresco:fresco:2.0.0'\n    implementation 'com.facebook.fresco:animated-gif:2.0.0'\n    implementation 'com.github.bumptech.glide:glide:4.10.0'\n    implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'\n\n\n### 配置manifest\n\n 截图：\n\n![image](https://github.com/FinalTeam/RxGalleryFinal/blob/master/screenshots/a1.png)\n\n\n* 提供了相关的Api\n\n* 请查看MainActivity的示例代码 [查看 Sample 代码](https://github.com/FinalTeam/RxGalleryFinal/blob/master/sample/src/main/java/cn/finalteam/rxgalleryfinal/sample/MainActivity.java) \n\n\n\t\t   //自定义方法的使用\n\t\t   onClickZDListener();\n\t\t   //调用图片选择器Api\n\t\t   onClickSelImgListener();\n\t\t   //调用视频选择器Api\n\t\t   onClickSelVDListener();\n\t\t   //调用裁剪Api\n\t\t   onClickImgCropListener();\n\t   \t\t//手动打开日志。\n\t  \t \tModelUtils.setDebugModel(true);\n\n\n* 这里可以配置主题\n\n![image](https://github.com/FinalTeam/RxGalleryFinal/blob/master/screenshots/device-2017-04-11-154816.png)\n\n##  Theme\n\n\t配置Theme请查看sample下的 xml-\u003e TestTheme..\n\n* Code\n\n\t\t//自定义方法的单选\n\t\tRxGalleryFinal\n\t\t.with(context)\n\t\t.image()\n\t\t.radio()\n\t\t.crop()\n\t\t.imageLoader(ImageLoaderType.GLIDE)\n\t\t.subscribe(new RxBusResultSubscriber\u003cImageRadioResultEvent\u003e() {\n\t\t    @Override\n\t\t    protected void onEvent(ImageRadioResultEvent imageRadioResultEvent) throws Exception {\n\t\t        //图片选择结果\n\t\t        .....\n\t\t    }\n\t\t})\n\t\t.openGallery();\n\n\n----\n\n\n\t\t//自定义方法的多选\n\t\tRxGalleryFinal.with(MainActivity.this)\n\t\t.image()\n\t\t.multiple()\n\t\t.maxSize(8)\n\t\t.imageLoader(ImageLoaderType.UNIVERSAL)\n\t\t.subscribe(new RxBusResultSubscriber\u003cImageMultipleResultEvent\u003e() {\n\t\t       @Override\n\t\t       protected void onEvent(ImageMultipleResultEvent imageMultipleResultEvent) throws Exception {\n\t\t          toast(\"已选择\" + imageMultipleResultEvent.getResult().size() + \"张图片\");\n\t\t       }\n\t\t       @Override\n\t\t       public void onCompleted() {\n\t\t       super.onCompleted();\n\t\t           Toast.makeText(getBaseContext(), \"OVER\", Toast.LENGTH_SHORT).show();\n\t\t       }\n\t\t}).openGallery();\n\n\n---\n\n\n\n\t\t //得到图片多选的事件\n\t\t RxGalleryListener.getInstance().setMultiImageCheckedListener(new IMultiImageCheckedListener() {\n\t\t       @Override\n\t\t       public void selectedImg(Object t, boolean isChecked) {\n\t\t            //这个主要点击或者按到就会触发，所以不建议在这里进行Toast\n\t\t       }\n\t\t       @Override\n\t\t       public void selectedImgMax(Object t, boolean isChecked, int maxSize) {\n\t\t           toast(\"你最多只能选择\" + maxSize + \"张图片\");\n\t\t       }\n\t\t});\n\n----\n\n\n\t\t //注解诠释\n\t\t RxGalleryFinal.with(context)\n\t\t      .image()//图片\n\t\t      .radio()//单选\n\t\t      .crop()//裁剪\n\t\t      .video()//视频\n\t\t      .imageLoader(ImageLoaderType.GLIDE)\n\t\t      //里面可以选择主流图片工具  PICASSO  GLIDE  FRESCO UNIVERSAL(ImageLoader)\n\t\t      .subscribe(rxBusResultSubscriber)\n\t\t      .openGallery();\n\n\n----\n\n\t    //调用裁剪.RxGalleryFinalApi.getModelPath()为默认的输出路径\n\t    RxGalleryFinalApi.cropScannerForResult(MainActivity.this, RxGalleryFinalApi.getModelPath(), inputImg);\n\n----\n\n\n    //获取和设置 保存路径\n    RxGalleryFinalApi.getImgSaveRxCropDirByFile();//得到裁剪路径\n    RxGalleryFinalApi.getImgSaveRxCropDirByStr();//得到裁剪路径\n    RxGalleryFinalApi.getImgSaveRxDirByFile();//得到图片路径\n    RxGalleryFinalApi.getImgSaveRxCropDirByStr();//得到图片路径\n\n    //获取和设置 保存路径\n    //…… setImgSaveXXXXX().\n    //图片自动会存储到下面，裁剪会自动生成路径；也可以手动设置裁剪的路径；\n    RxGalleryFinalApi.setImgSaveRxSDCard(\"dujinyang\");\n\n----\n\n\n\n\t    //自定义裁剪\n\t   rx.cropAspectRatioOptions(0, new AspectRatio(\"3:3\",30, 10))\n\t   .crop()\n\t   .openGallery();\n\n----\n\n\n\t  //4.演示 单选裁剪 并且增加回掉 （裁剪必须在open之前）\n\t  RxGalleryFinalApi.getInstance(this)\n\t     .onCrop(true)//是否裁剪\n\t     .openGalleryRadioImgDefault(new RxBusResultSubscriber() {\n\t             @Override\n\t             protected void onEvent(Object o) throws Exception {\n\t                  Logger.i(\"只要选择图片就会触发\");\n\t             }\n\t      })\n\t     .onCropImageResult(new IRadioImageCheckedListener() {\n\t             @Override\n\t             public void cropAfter(Object t) {\n\t                  Logger.i(\"裁剪完成\");\n\t             }\n\t\n\t             @Override\n\t             public boolean isActivityFinish() {\n\t                  Logger.i(\"返回false不关闭，返回true则为关闭\");\n\t                  return true;\n\t             }\n\t     });\n\n\n* 添加权限\n\n\n\t\t\u003cuses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" /\u003e\n\t\t\u003cuses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\" /\u003e\n\n\n* 注册activity\n\n\t\t\u003capplication\n\t\t    ...\n\t\t    android:theme=\"@style/Theme_Light\"\u003e\n\t\t\u003cactivity\n\t\t    android:name=\"cn.finalteam.rxgalleryfinal.ui.activity.MediaActivity\"\n\t\t    android:screenOrientation=\"portrait\"\n\t\t    android:exported=\"true\"\n\t\t    android:theme=\"@style/Theme_Light.Default\"/\u003e\n\t\t\u003cactivity\n\t\t    android:name=\"com.yalantis.ucrop.UCropActivity\"\n\t\t    android:screenOrientation=\"portrait\"\n\t\t    android:theme=\"@style/Theme_Light.Default\"/\u003e\n\t\t\u003c/application\n\n\n## 混淆配置\n\t\n\t#1.support-v7-appcompat\n\t-keep public class android.support.v7.widget.** { *; }\n\t-keep public class android.support.v7.internal.widget.** { *; }\n\t-keep public class android.support.v7.internal.view.menu.** { *; }\n\t\n\t-keep public class * extends android.support.v4.view.ActionProvider {\n\t    public \u003cinit\u003e(android.content.Context);\n\t}\n\t\n\t#2.rx\n\t-dontwarn io.reactivex.**\n\t-keep io.reactivex.**\n\t-keepclassmembers class io.reactivex.** { *; }\n\t\n\t#3.retrolambda\n\t-dontwarn java.lang.invoke.*\n\t\n\t#4.support-v4\n\t-keep class android.support.v4.** { *; }\n\t-keep interface android.support.v4.** { *; }\n\t\n\t#5.ucrop\n\t-dontwarn com.yalantis.ucrop**\n\t-keep class com.yalantis.ucrop** { *; }\n\t-keep interface com.yalantis.ucrop** { *; }\n\t\n\t#6.photoview\n\t-keep class uk.co.senab.photoview** { *; }\n\t-keep interface uk.co.senab.photoview** { *; }\n\t\n\t#7.rxgalleryfinal\n\t-keep class cn.finalteam.rxgalleryfinal.ui.widget** { *; }\n\t\n\t-keepclassmembers class * extends android.app.Activity {\n\t   public void *(android.view.View);\n\t}\n\t-keepclassmembers enum * {\n\t    public static **[] values();\n\t    public static ** valueOf(java.lang.String);\n\t}\n\t-keep class * implements android.os.Parcelable {\n\t  public static final android.os.Parcelable$Creator *;\n\t}\n\t-keepclassmembers class **.R$* {\n\t    public static \u003cfields\u003e;\n\t}\n\t\n\t-keepattributes *Annotation*\n\t-keepclasseswithmembernames class * {\n\t    native \u003cmethods\u003e;\n\t}\n\t-keepclassmembers public class * extends android.view.View {\n\t   void set*(***);\n\t   *** get*();\n\t}\n\n\n## Q\u0026A\n* 1、出现图片倒立问题，如何解决\n* 2、如何压缩图片\n* 3、Android 7.0闪退\n* 4、授权说明\n\n## 联系\n    如果有紧急事件可联系作者或加Q群：\n    - Q群号： 218801658\n    - Q群号： 246231638\n\n## Wiki\n\n   * [GalleryFinal 问题系列 ](https://github.com/FinalTeam/RxGalleryFinal/wiki)\n   * [RxGalleryFinal 问题系列](https://github.com/FinalTeam/RxGalleryFinal/wiki/RxGalleryFinal-%E9%97%AE%E9%A2%98%E7%B3%BB%E5%88%97)\n   * [RxGalleryFinal Version](https://github.com/FinalTeam/RxGalleryFinal/wiki/RxGalleryFinal-Version)\n\n\n\n\n\u003chr/\u003e\n\n有兴趣的可以关注【Python2048】 公众号\u003cbr/\u003e\n分享技术、灰色产业、职业规划、赚钱之道、逆向破解等趣事……\n\n\u003cimg src=\"https://github.com/sheep0704/IOSIphoneHttps/blob/master/python2048.jpg\" width=\"300\" height=\"300\"\u003e\n\n\n\n \n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffinalteam%2Frxgalleryfinal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffinalteam%2Frxgalleryfinal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffinalteam%2Frxgalleryfinal/lists"}