ImagePicker

Introduction: A simple library that allows you to select images from the device library or directly from the camera.
More: Author   ReportBugs   
Tags:

An Android library that allows you to select images from the device library or camera with a handy UI customization.

Preview

Changelog

  • Revert to parcelable's old methods due to the issue #158.

Installation

In settings.gradle file, add JitPack maven as below:

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

Add the dependency in app build.gradle:

dependencies {
    implementation 'com.github.nguyenhoanglam:ImagePicker:1.6.3'
}

Usage

Define an ActivityResultLauncher class variable in Activity or Fragment.

private val launcher = registerImagePicker { images ->
    // selected images
    if(images.isNotEmpty()){
        val image = images[0]
        Glide.with(this@MainActivity)
            .load(image.uri)
            .into(imageView)
    }
}

Then launch the picker

  • with default configuration:
    launcher.launch()
    
  • with custom configuration: ```java val config = ImagePickerConfig(
      isFolderMode = true,
      isShowCamera = true,
      limitSize = 10,
      selectedIndicatorType = IndicatorType.NUMBER,
      rootDirectory = RootDirectory.DCIM,
      subDirectory = "Image Picker",
      folderGridCount = GridCount(2, 4),
      imageGridCount = GridCount(3, 5),
      customColor = CustomColor(
          background = "#000000",
          statusBar = "#000000",
          toolbar = "#212121",
          toolbarTitle = "#FFFFFF",
          toolbarIcon = "#FFFFFF",
      ),
      customMessage = CustomMessage(
          reachLimitSize = "You can only select up to 10 images.",
          noImage = "No image found.",
          noPhotoAccessPermission = "Please allow permission to access photos and media.",
          noCameraPermission = "Please allow permission to access camera."
      ),
      customDrawable = CustomDrawable(
          cameraIcon = R.drawable.ic_camera,
          selectAllIcon = R.drawable.ic_select_all,
          unselectAllIcon = R.drawable.ic_unselect_all,
          loadingImagePlaceholder = R.drawable.img_loading_placeholder
      ),
      // see more options below
    
    )

launcher.launch(config) ```

Configuration options

Option Description Default value
isCameraMode Capture an image from the camera instead of selecting from the library. If set to true, this option will ignore most of other options such as isMultiSelectMode, isFolderMode, customColor, customIcon... false
isSingleSelectMode Return single image array immediately after selecting or capturing an image. false
isFolderMode Group images in folders. true
isShowCamera Show the camera button. true
isAlwaysShowDoneButton Show done button even if there's no image that has been selected yet. true
isSelectAllEnabled Show select all images button (works if isMultiSelectMode = true). true
isUnselectAllEnabled Show unselect all images button (works if isMultiSelectMode = true). true
isImageTransitionEnabled Enable image transition. true
statusBarContentMode Status bar content mode. StatusBarContent.LIGHT
selectedIndicatorType Set selected image's indicator type. IndicatorType.NUMBER
limitSize Maximum number of images that can be selected. Int.MAX_VALUE
folderGridCount Number of folder columns for portrait and landscape orientation. GridCount(2, 4)
imageGridCount Number of image columns for portrait and landscape orientation. GridCount(3, 5)
imageSort Define images sorting type. ImageSort(by = SortBy.DATE_ADDED, order = SortOrder.DESC)
doneButtonTitle Done button's title. DONE
snackBarButtonTitle Snack bar action button's title. OK
folderTitle Toolbar title for folder mode (works if isFolderMode = true). Gallery
imageTitle Toolbar title for image mode (works if isFolderMode = false). Photos
rootDirectory Public root directory of the captured image. RootDirectory.DCIM
subDirectory Subfolder of root directory where the captured image is saved. application name
selectedImages Define images that will be marked as selected when launching picker. empty list
customColor Custom colors: toolbar, indicator... CustomColor(...)
customDrawable Custom drawable resources: back icon, camera icon, image placeholder... CustomDrawable(...)
customMessage Custom messages: no permission, limit size, error... CustomMessage(...)

ImageSort class

Define sorting for images | Property | Description | Default value | -------- | ----------- | :---: | | by | Sorting type: date added, date modified and display name. | DATE_ADDED | order | Sorting order: ascending and descending. | DESC

CustomColor class

Define custom color for views, type = String. | Property | Description | Default value | -------- | ----------- | :---: | | background | Background color. | #000000 | statusBar | Status bar color. | #000000 | toolbar | Toolbar color. | #212121 | toolbarTitle | Toolbar title color. | #FFFFFF | toolbarIcon | Toolbar icons color (this color will not be applied to CustomDrawable toolbar icons). | #FFFFFF | doneButtonTitle | Done button title color. | #FFFFFF | snackBarBackground | Snack bar background color. | #323232 | snackBarMessage | Snack bar message color. | #FFFFFF | snackBarButtonTitle | Snack bar button title color. | #4CAF50 | loadingIndicator | Loading indicator color. | #757575 | selectedImageIndicator | Selected image indicator color. | #1976D2

CustomDrawable class

Define custom icon for the toolbar's buttons, type = Int (resource id). 24dp icon size is recommended. | Property | Description | Example | -------- | ----------- | :---: | | backIcon | Back button icon. | R.drawable.ic_back | cameraIcon | Camera button icon. | R.drawable.ic_camera | selectAllIcon | Select all button icon. | R.drawable.ic_select_all | unselectAllIcon | Unselect all button icon. | R.drawable.ic_unselect_all | loadingImagePlaceholder | Placeholder for loading image. | R.drawable.img_loading_placeholder | errorImagePlaceholder | Placeholder for error image. | R.drawable.img_error_placeholder

CustomMessage class

Define custom message when something's wrong, type = String. | Property | Description | Default value | -------- | ----------- | :---: | | reachLimitSize | Reached the limit number of images that can be selected. | You have reached the limit number of images. | cameraError | Failed to open camera. | Could not open camera. | noCamera | Device has no camera. | No camera found. | noImage | Device has no images. | No images found. | noPhotoAccessPermission | Photos and media access permission is not granted. | Please allow permission to access photos and media. | noCameraPermission | Camera permission is not granted. | Please allow permission to access camera.

Author

Copyright © 2016 Nguyen Hoang Lam

LinkedIn Facebook LinkedIn

Apps
About Me
GitHub: Trinea
Facebook: Dev Tools