Convert Figma logo to code with AI

FinalTeam logoRxGalleryFinal

图片选择库,单选/多选、拍照、裁剪、压缩,自定义。包括视频选择和录制。

2,827
513
2,827
151

Top Related Projects

34,636

An image loading and caching library for Android focused on smooth scrolling

18,710

A powerful image downloading and caching library for Android

Powerful and flexible library for loading, caching and displaying images on Android.

18,777

Implementation of ImageView for Android that supports zooming, by various touch gestures.

Android library (AAR). Highly configurable, easily extendable deep zoom view for displaying huge images without loss of detail. Perfect for photo galleries, maps, building plans etc.

11,868

Image Cropping Library for Android

Quick Overview

RxGalleryFinal is an Android image/video selector and editor library. It provides a customizable gallery interface with features like multi-select, cropping, and filtering, all integrated with RxJava for reactive programming.

Pros

  • Comprehensive media selection and editing capabilities
  • Reactive programming support through RxJava integration
  • Highly customizable UI and functionality
  • Supports both image and video selection

Cons

  • Learning curve for developers unfamiliar with RxJava
  • May be overkill for simple image selection needs
  • Limited documentation in English
  • Potential performance issues with large media libraries

Code Examples

  1. Basic image selection:
RxGalleryFinal.with(this)
    .image()
    .radio()
    .crop()
    .imageLoader(ImageLoaderType.GLIDE)
    .subscribe { result ->
        val path = result.originalPath
        // Handle selected image
    }
    .openGallery()
  1. Multi-image selection:
RxGalleryFinal.with(this)
    .image()
    .multiple()
    .maxSize(3)
    .imageLoader(ImageLoaderType.GLIDE)
    .subscribe { list ->
        list.forEach { result ->
            val path = result.originalPath
            // Handle each selected image
        }
    }
    .openGallery()
  1. Video selection:
RxGalleryFinal.with(this)
    .video()
    .radio()
    .imageLoader(ImageLoaderType.GLIDE)
    .subscribe { result ->
        val path = result.originalPath
        // Handle selected video
    }
    .openGallery()

Getting Started

  1. Add the dependency to your app's build.gradle:
dependencies {
    implementation 'cn.finalteam.rxgalleryfinal:library:1.1.3'
}
  1. Initialize RxGalleryFinal in your Activity or Fragment:
RxGalleryFinal.with(this)
    .image()
    .radio()
    .crop()
    .imageLoader(ImageLoaderType.GLIDE)
    .subscribe { result ->
        val path = result.originalPath
        // Handle selected image
    }
    .openGallery()
  1. Don't forget to handle permissions for accessing external storage in your app.

Competitor Comparisons

34,636

An image loading and caching library for Android focused on smooth scrolling

Pros of Glide

  • Highly efficient image loading and caching library
  • Supports a wide range of image formats and sources
  • Extensive documentation and community support

Cons of Glide

  • Larger library size compared to RxGalleryFinal
  • May require more configuration for complex use cases
  • Limited built-in image editing capabilities

Code Comparison

RxGalleryFinal:

RxGalleryFinal.with(this)
    .image()
    .radio()
    .crop()
    .imageLoader(ImageLoaderType.GLIDE)
    .subscribe(new RxBusResultSubscriber<ImageRadioResultEvent>() {
        @Override
        protected void onEvent(ImageRadioResultEvent imageRadioResultEvent) throws Exception {
            // Handle selected image
        }
    })
    .openGallery();

Glide:

Glide.with(this)
    .load(imageUrl)
    .placeholder(R.drawable.placeholder)
    .error(R.drawable.error)
    .into(imageView);

RxGalleryFinal focuses on providing a complete gallery solution with image selection and editing capabilities, while Glide specializes in efficient image loading and caching. RxGalleryFinal offers more built-in features for image selection and manipulation, whereas Glide excels in performance and flexibility for image loading from various sources.

18,710

A powerful image downloading and caching library for Android

Pros of Picasso

  • Widely adopted and battle-tested image loading library
  • Extensive caching and memory management features
  • Simple API for common image loading tasks

Cons of Picasso

  • Limited to image loading and basic transformations
  • Lacks built-in gallery or image selection functionality
  • Requires additional libraries for more advanced image processing

Code Comparison

RxGalleryFinal (Image selection):

RxGalleryFinal.with(context)
    .image()
    .multiple()
    .maxSize(8)
    .select((list, allList) -> {
        // Handle selected images
    })
    .openGallery();

Picasso (Image loading):

Picasso.get()
    .load("https://example.com/image.jpg")
    .resize(300, 300)
    .centerCrop()
    .into(imageView);

Summary

RxGalleryFinal is a comprehensive gallery and image selection library with built-in camera functionality, while Picasso focuses solely on efficient image loading and basic transformations. RxGalleryFinal offers more features for image selection and capture, but Picasso excels in simplicity and performance for image loading tasks. Choose RxGalleryFinal for full gallery functionality or Picasso for streamlined image loading in your Android applications.

Powerful and flexible library for loading, caching and displaying images on Android.

Pros of Android-Universal-Image-Loader

  • More mature and widely adopted library with extensive documentation
  • Supports a broader range of image sources, including network, local storage, and assets
  • Offers more customization options for image loading and caching

Cons of Android-Universal-Image-Loader

  • No longer actively maintained, with the last update in 2016
  • Lacks modern features like Kotlin support and integration with newer Android architecture components

Code Comparison

Android-Universal-Image-Loader:

ImageLoader imageLoader = ImageLoader.getInstance();
imageLoader.displayImage(imageUri, imageView, options);

RxGalleryFinal:

RxGalleryFinal.with(this)
    .image()
    .radio()
    .crop()
    .imageLoader(ImageLoaderType.GLIDE)
    .subscribe(new RxBusResultSubscriber<ImageRadioResultEvent>() {
        @Override
        protected void onEvent(ImageRadioResultEvent imageRadioResultEvent) throws Exception {
            // Handle selected image
        }
    })
    .openGallery();

RxGalleryFinal focuses on providing a complete gallery solution with image selection and editing capabilities, while Android-Universal-Image-Loader is primarily an image loading and caching library. RxGalleryFinal offers a more modern approach with RxJava integration and built-in UI components, whereas Android-Universal-Image-Loader provides lower-level control over image loading and caching processes.

18,777

Implementation of ImageView for Android that supports zooming, by various touch gestures.

Pros of PhotoView

  • Focused specifically on image viewing and zooming functionality
  • Lightweight and easy to integrate into existing projects
  • Supports gestures like pinch-to-zoom and double-tap zoom

Cons of PhotoView

  • Limited to image viewing, lacks gallery management features
  • No built-in image loading or caching mechanisms
  • Less actively maintained compared to RxGalleryFinal

Code Comparison

PhotoView implementation:

PhotoView photoView = findViewById(R.id.photo_view);
photoView.setImageResource(R.drawable.image);

RxGalleryFinal implementation:

RxGalleryFinal.with(this)
    .image()
    .radio()
    .crop()
    .imageLoader(ImageLoaderType.GLIDE)
    .subscribe(new RxBusResultSubscriber<ImageRadioResultEvent>() {
        @Override
        protected void onEvent(ImageRadioResultEvent imageRadioResultEvent) throws Exception {
            // Handle selected image
        }
    })
    .openGallery();

PhotoView is more straightforward for simple image viewing, while RxGalleryFinal offers a more comprehensive solution for image selection and manipulation. PhotoView is ideal for projects that only need zooming capabilities, whereas RxGalleryFinal is better suited for applications requiring full gallery functionality with additional features like image cropping and filtering.

Android library (AAR). Highly configurable, easily extendable deep zoom view for displaying huge images without loss of detail. Perfect for photo galleries, maps, building plans etc.

Pros of subsampling-scale-image-view

  • Specialized for handling large images efficiently
  • Supports zooming and panning with smooth animations
  • Lightweight and focused on a single functionality

Cons of subsampling-scale-image-view

  • Limited to image viewing, lacks gallery management features
  • No built-in image selection or editing capabilities
  • Requires additional implementation for multi-image handling

Code Comparison

subsampling-scale-image-view:

SubsamplingScaleImageView imageView = new SubsamplingScaleImageView(context);
imageView.setImage(ImageSource.uri("/sdcard/full-image.jpg"));
imageView.setMaxScale(10f);

RxGalleryFinal:

RxGalleryFinal.with(context)
    .image()
    .multiple()
    .maxSize(8)
    .imageLoader(ImageLoaderType.GLIDE)
    .subscribe(new RxBusResultSubscriber<ImageMultipleResultEvent>() {
        @Override
        protected void onEvent(ImageMultipleResultEvent event) {
            // Handle selected images
        }
    })
    .openGallery();

subsampling-scale-image-view focuses on displaying and manipulating single large images with high performance, while RxGalleryFinal provides a complete gallery solution with image selection, preview, and integration with various image loading libraries. The code comparison shows the simplicity of setting up subsampling-scale-image-view for viewing a single image, contrasted with RxGalleryFinal's more comprehensive approach to gallery management and image selection.

11,868

Image Cropping Library for Android

Pros of uCrop

  • Focused specifically on image cropping with advanced features
  • Highly customizable UI and crop options
  • Smooth animations and gestures for intuitive user experience

Cons of uCrop

  • Limited to cropping functionality only
  • Requires integration with other libraries for full gallery management
  • May have a steeper learning curve for basic implementations

Code Comparison

uCrop:

UCrop.of(sourceUri, destinationUri)
    .withAspectRatio(16, 9)
    .withMaxResultSize(maxWidth, maxHeight)
    .start(this);

RxGalleryFinal:

RxGalleryFinal.with(this)
    .image()
    .crop()
    .multiple()
    .maxSize(9)
    .imageLoader(ImageLoaderType.GLIDE)
    .subscribe(new RxBusResultSubscriber<ImageMultipleResultEvent>() {
        // Handle results
    })
    .openGallery();

Summary

uCrop excels in providing a dedicated, feature-rich image cropping solution with high customizability. However, it's limited to cropping functionality. RxGalleryFinal offers a more comprehensive gallery management solution with built-in cropping capabilities, making it suitable for projects requiring full image selection and editing features. The choice between the two depends on the specific requirements of your project and whether you need a standalone cropping tool or a full-featured gallery solution.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

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】 公众号
分享技术、灰色产业、职业规划、赚钱之道、逆向破解等趣事……