Photo picker library for android. Let's you pick photos directly from files, or navigate to camera or gallery.

Overview

ChiliPhotoPicker

Made with ❤️ by Chili Labs.

Library made without DataBinding, RxJava and image loading libraries, to give you opportunity to use it without additional dependencies.

  • Picker styled as bottom sheet dialog
  • Could be used for single or multiple photos pick
  • Allows to choose how images are loaded into ImageView
  • Takes responsibility for all needed permissions
  • Takes responsibility for fetching gallery/camera result
  • Have two built-in themes - Light and Dark
  • Easy custamizable
No permission Single choice Multiple choice

Setup

Gradle:

Add Jitpack to your root build.gradle file:

allprojects {
    repositories {
        google()
        jcenter()
        maven { url "https://jitpack.io" }
    }
}

Add dependency to application build.gradle file, where x.y.z is the latest release version:

implementation "com.github.ChiliLabs:ChiliPhotoPicker:x.y.z"

Usage

Initialize ChiliPhotoPicker in your Application's class onCreate

  • loader - your preferred ImageLoader implementation (ready examples for Glide and Picasso are here)
  • authority - your file provider authority. Is needed if you set allowCamera to true, so picker could store temporary photo from camera
ChiliPhotoPicker.init(
        loader = GlideImageLoader(),
        authority = "lv.chi.sample.fileprovider"
    )

Create new instance of PhotoPickerFragment

  • multiple - true for multiple image pick, false for single
  • allowCamera - true to show Camera button, false to hide
  • maxSelection - limit images count to pick
  • theme - built-in or custom theme (by default ChiliPhotoPicker.Light is used)
  • Show as dialog
PhotoPickerFragment.newInstance(
        multiple = true, 
        allowCamera = true,
        maxSelection = 5,
        theme = R.style.ChiliPhotoPicker_Dark
).show(supportFragmentManager, YOUR_TAG)

Notes: Picker will throw exception if:

  • loader was not initialized
  • authority was null while accessing camera

ImageLoader

We don't want to depend on many image loading libraries, so we have simple ImageLoader interface, which you can implement using your preferred library (Glide, Picasso, Coil, etc.) We have two working examples of ImageLoader implementations - using Glide and Picasso. You can just copy one of them or write your own implementation

Callback

Picked photos URIs are returned via callbacks onImagesPicked function, so you just need to implement PhotoPickerFragment.Callback interface in your activity or fragment

Themes

To customize picker you can use one of built-in themes or inherit it rewriting attributes you want (see example)

Attributes:

  • pickerBackgroundColor - background color
  • pickerPrimaryColor - primary picker color (no permission/empty texts, cancel icon)
  • pickerSecondaryColor - secondary picker color (snackbar)
  • pickerControlColor - color of buttons, icons, checkboxes, ripple
  • pickerGalleryIcon - drawable for Gallery icon (to remove it use @null as attribute value)
  • pickerCameraIcon - drawable for Camera icon (to remove it use @null as attribute value)
  • pickerCornerRadius - background's corners radius
  • pickerDividerColor - color of line below Gallery/Camera buttons

Localization

It's difficult to translate library to each language, so default strings are on English, but you can easily override them. Example for common strings and plurals are here. All strings used in library can be found here

License

Copyright 2019 Chili Labs

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Comments
  • Crash when selecting Camera

    Crash when selecting Camera

    When I open the photo picker fragment and click Camera, I immediately get the following exception:

    pl.baftek.discoverrudy E/AndroidRuntime: FATAL EXCEPTION: main
        Process: pl.baftek.discoverrudy, PID: 10220
        java.lang.RuntimeException: Unable to start activity ComponentInfo{pl.baftek.discoverrudy/lv.chi.photopicker.utils.CameraActivity}: java.lang.IllegalArgumentException: Failed to find configured root that contains /data/data/pl.baftek.discoverrudy/cache/camera/tmp6252440890878372045.jpg
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
            at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
            at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
            at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
            at android.os.Handler.dispatchMessage(Handler.java:107)
            at android.os.Looper.loop(Looper.java:214)
            at android.app.ActivityThread.main(ActivityThread.java:7356)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
         Caused by: java.lang.IllegalArgumentException: Failed to find configured root that contains /data/data/pl.baftek.discoverrudy/cache/camera/tmp6252440890878372045.jpg
            at androidx.core.content.FileProvider$SimplePathStrategy.getUriForFile(FileProvider.java:744)
            at androidx.core.content.FileProvider.getUriForFile(FileProvider.java:418)
            at lv.chi.photopicker.utils.FileProvidersKt.providerUri(FileProviders.kt:9)
            at lv.chi.photopicker.utils.CameraActivity.provideImageUri(CameraActivity.kt:77)
            at lv.chi.photopicker.utils.CameraActivity.onCreate(CameraActivity.kt:29)
            at android.app.Activity.performCreate(Activity.java:7802)
            at android.app.Activity.performCreate(Activity.java:7791)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409) 
            at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 
            at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
            at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) 
            at android.os.Handler.dispatchMessage(Handler.java:107) 
            at android.os.Looper.loop(Looper.java:214) 
            at android.app.ActivityThread.main(ActivityThread.java:7356) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 
    

    What should I do?

    I'm on Android 10 and have the following in my AndroidManifest.xml:

    <provider
                android:name="androidx.core.content.FileProvider"
                android:authorities="pl.baftek.discoverrudy.fileprovider"
                android:exported="false"
                android:grantUriPermissions="true">
                <meta-data
                    android:name="android.support.FILE_PROVIDER_PATHS"
                    android:resource="@xml/file_paths" />
            </provider>
    

    This is file_paths.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <paths>
        <external-path
            name="Comment images"
            path="Android/data/pl.baftek.discoverrudy/files/Pictures" />
        <external-path
            name="Chili image cache"
            path="/data/data/pl.baftek.discoverrudy/cache/camera" />
    </paths>
    
    opened by bartekpacia 5
  • BUG: Just crashes

    BUG: Just crashes

    I simply put implementation "com.github.ChiliLabs:ChiliPhotoPicker:0.2.0" in my app/build.gradle and app started crashing with this exception:

    java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE flg=0x3 cmp=com.sec.android.app.camera/.Camera clip={text/uri-list U:content://pl.baftek.discoverrudy.fileprovider/Comment%20images/commentphoto_20191120_192059_6067355174982695808.jpg} (has extras) } from ProcessRecord{d346b7fd0 20377:pl.baftek.discoverrudy/u0a281} (pid=20377, uid=10281) with revoked permission android.permission.CAMERA

    Caused by: android.os.RemoteException: Remote stack trace: at com.android.server.am.ActivityStackSupervisor.checkStartAnyActivityPermission(ActivityStackSupervisor.java:2118) at com.android.server.am.ActivityStarter.startActivity(ActivityStarter.java:892) at com.android.server.am.ActivityStarter.startActivity(ActivityStarter.java:662) at com.android.server.am.ActivityStarter.startActivityMayWait(ActivityStarter.java:1511) at com.android.server.am.ActivityStarter.execute(ActivityStarter.java:603)

    Code that causes this to happen:

    private fun dispatchTakePictureIntent(imageView: View) {
            val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
    
            // Ensure that there's a camera activity to handle the intent
            if (takePictureIntent.resolveActivity(packageManager) != null) {
                // Create the File where the photo should go
                photoFile = try {
                    createImageFile()
                } catch (e: IOException) {
                    // Error occurred while creating the File
                    e.printStackTrace()
                    null
                }
    
                // Continue only if the File was successfully created
                if (photoFile != null) {
                    val photoUri: Uri = FileProvider.getUriForFile(
                        this,
                        "pl.baftek.discoverrudy.fileprovider",
                        photoFile!!
                    )
                    lastImageView = imageView.id
    
                    takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri)
                    startActivityForResult(takePictureIntent, 1)
                }
            }
        }
    

    I've tested it and I'm certaing that implementation of this library is the only reason why my app crashes. When I write implementation ..., app crashes while executing the aforementioned block of code. I totally don't have any idea why this thing happens. It's a pity, because I'm currenly looking for a lib like this.

    opened by bartekpacia 4
  • Feature: maxSelectionCount

    Feature: maxSelectionCount

    Hi

    thanks for this amazing library. I have a feature request.

    Add setting maxSelectionCount:Int to set the maximum count of photos that can be selected.

    My use case is that user can select 1 to 4 images. Currently I have to take the first 4 photos and discard the other ones. It would be nice, when the is not allowed to select more than X photos

    enhancement 
    opened by mgursch 3
  • Max photo count: Plurals string

    Max photo count: Plurals string

    Hello

    it is necessary to introduce plural handling for the max photo count feature.

    current string res id: picker_max_selection_reached

    Its working when you only support english (and eg german) but its not working for languages with more complex plural rules like polish (many, few, ...).

    opened by mgursch 2
  • Doesn't ask for permissions in Java implementation

    Doesn't ask for permissions in Java implementation

    I worked around this library and implemented it in Java but it doesn't ask for permissions when clicking on the "Allow" button without any error message or crash. Is this because it has be done in java or there is something I am missing in the implementation?

    opened by JagarYousef 1
  • onImagesPicked callback is not called in fragment

    onImagesPicked callback is not called in fragment

    I have written the code like below

    fun showPhotoPickerFragment() {
            PhotoPickerFragment.newInstance(
                multiple = false,
                allowCamera = true,
                theme = R.style.ChiliPhotoPicker_Light
            ).show(requireActivity().supportFragmentManager, "UploadProfileFragment")
        }
    
    override fun onImagesPicked(photos: ArrayList<Uri>) {
        val initialPath = photos.get(0).path
        if (initialPath?.contains("emulated")!!) {
            imagePath = initialPath
        } else {
            imagePath = "/data/data/${requireActivity().packageName}/cache" + initialPath
        }
        println("onImagesPicked $imagePath")
        val file = File(imagePath)
        Picasso.with(requireContext()).load(file).into(binding.ivProfilePic)
    }
    

    In the Application class, I am initializing like this ChiliPhotoPicker.init(loader = PicassoImageLoader(), authority = "$packageName.fileprovider")

    When I run the code, the Picker appears but when I select a image the onImagePicked callback is never called.

    opened by theanilpaudel 1
  • Add support for choosing videos

    Add support for choosing videos

    I've been using this very useful library a lot so I decided to add the support for choosing and taking videos. I have also upgraded all dependencies to latest versions and made appropriate syntax corrections where necessary.

    This can be activated by passing an optional parameter pickerType to the newInstance method. By default only photos can be selected.

    MediaPickerFragment.newInstance(
            multiple = true,
            allowCamera = true,
            pickerType = MediaPickerFragment.PickerType.VIDEO, //required for video mode
            maxSelection = 5,
            theme = R.style.ChiliPhotoPicker_Dark
        ).show(supportFragmentManager, "picker")
    

    Almost every core class has been renamed (apparently we can't keep the photo prefixes because there is video suppport now) so this enhancement causes a breaking change. These are the classes that have changed.

    |Old name | New Name| |--|--| | SelectablePhoto |SelectableMedia | |PhotoPickerFragment|MediaPickerFragment| |PhotoPickerAdapter|MediaPickerAdapter|

    Consumers of this class only need to worry about renaming PhotoPickerFragment to MediaPickerFragment and the callback from PhotoPickerFragment.Callback to MediaPickerFragment.Callback

    Everything else remains the same.

    opened by Rafsanjani 0
  • Error from implementation

    Error from implementation

    Hi,

    I get the following error when integrating ChiliPicker

    ERROR: Failed to resolve: com.github.ChiliLabs: ChiliPhotoPicker: x.y.z Show in Project Structure dialog Affected Modules: app

    opened by datapasko 0
  • Refactor picker configuration flow

    Refactor picker configuration flow

    Setup picker via ChiliPhotoPicker Save picker settings to PickerConfiguration object Adjust layout to support landscape orientation Convert PickerState to PickerViewModel to save state after config changed Add possibility to limit maximal count of pickable images

    opened by APetjko 0
  • Add possibility to customize picker

    Add possibility to customize picker

    Make it possible to hide Camera button, configure background corners radius, Camera/Gallery icons, color for background text and controls Add two predefined themes (light and dark)

    opened by APetjko 0
  • 2 issues crashing the app on some devices

    2 issues crashing the app on some devices

    Issue 1

    Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.zrtech.pixart/lv.chi.photopicker.utils.CameraActivity}: java.lang.IllegalStateException: intent.resolveActivity(packageManager) must not be null at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3611) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3775) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2246) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:233) at android.app.ActivityThread.main(ActivityThread.java:8010) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:631) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:978)

    Caused by java.lang.IllegalStateException: intent.resolveActivity(packageManager) must not be null at lv.chi.photopicker.utils.CameraActivity.requestImageCapture(CameraActivity.java:28) at lv.chi.photopicker.utils.CameraActivity.onCreate(CameraActivity.java:8) at android.app.Activity.performCreate(Activity.java:8006) at android.app.Activity.performCreate(Activity.java:7990) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1329) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3584) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3775) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2246) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:233) at android.app.ActivityThread.main(ActivityThread.java:8010) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:631) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:978)


    Issue 2

    Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.zrtech.pixart/com.zrtech.pixart.MainActivity}: java.lang.IllegalStateException: ImageLoader is null. You probably forget to call ChiliPhotoPicker.init() at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3611) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3775) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2246) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:233) at android.app.ActivityThread.main(ActivityThread.java:8010) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:631) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:978)

    Caused by java.lang.IllegalStateException: ImageLoader is null. You probably forget to call ChiliPhotoPicker.init() at lv.chi.photopicker.PickerConfiguration.getImageLoader(PickerConfiguration.java:16) at lv.chi.photopicker.PhotoPickerFragment.onCreate(PhotoPickerFragment.java:16) at androidx.fragment.app.Fragment.performCreate(Fragment.java:1) at androidx.fragment.app.FragmentStateManager.create(FragmentStateManager.java:1) at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:8) at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:1) at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1) at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3) at androidx.fragment.app.FragmentManager.dispatchCreate(FragmentManager.java:2) at androidx.fragment.app.FragmentController.dispatchCreate(FragmentController.java:1) at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:1) at lv.chi.photopicker.PickerConfiguration.setUp(PickerConfiguration.java) at android.app.Activity.performCreate(Activity.java:8006) at android.app.Activity.performCreate(Activity.java:7990) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1329) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3584) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3775) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2246) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:233) at android.app.ActivityThread.main(ActivityThread.java:8010) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:631) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:978)

    The second issue crashing the app say You probably forget to call ChiliPhotoPicker.init() but i am calling it inside onCreate on my main activity.

    Any help would be appreciated.

    And thanks for this awesome library.

    opened by ghost 1
  • Attempt to invoke virtual method 'void android.view.View.setTranslationY(float)' on a null object reference

    Attempt to invoke virtual method 'void android.view.View.setTranslationY(float)' on a null object reference

    Got this on a production device vivo 1811, SDK - 8.1.0. Any ideas?

    Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setTranslationY(float)' on a null object reference
           at lv.chi.photopicker.PhotoPickerFragment$pickerBottomSheetCallback$1.onSlide(PhotoPickerFragment.java:280)
           at com.google.android.material.bottomsheet.BottomSheetBehavior.dispatchOnSlide(BottomSheetBehavior.java:1503)
           at com.google.android.material.bottomsheet.BottomSheetBehavior$4.onViewPositionChanged(BottomSheetBehavior.java:1370)
           at androidx.customview.widget.ViewDragHelper.continueSettling(ViewDragHelper.java:779)
           at com.google.android.material.bottomsheet.BottomSheetBehavior$SettleRunnable.run(BottomSheetBehavior.java:1542)
    
    opened by ubarua123 0
  • Add fix for API > 30 intent queries

    Add fix for API > 30 intent queries

    Starting from API 30, due to the new restrictions on package visibility introduced in Android 11, it's required to add additional code in the AndroidManifest to run the library.

    This PR adds a workaround for Android 11 users.

    opened by paolorotolo 0
Releases(0.3.1)
Owner
Chili Labs
We make mobile apps. Want the app that will stand out? Hire Us!
Chili Labs
Stingle Photos is a secure, open-source photo, video cloud storage and backup application

Stingle Photos Stingle Photos is a secure, open-source photo, video cloud storage and backup application that is safe, ad-free and easy to use. It pro

Stingle 242 Dec 14, 2022
Awesome Image Picker library will pick images/gifs with beautiful interface. Supports image or gif, Single and Multiple Image selection.

Awesome Image Picker Awesome Image Picker library will pick images/gifs with beautiful interface. Supports image or gif, Single and Multiple Image sel

Prabhakar Thota 162 Sep 13, 2022
Image Cropping Library for Android, optimised for Camera / Gallery.

Image Cropping Library for Android, optimised for Camera / Gallery.

CanHub 812 Dec 30, 2022
A library for auto removing background from your photos.

This is an android library for removing background from the image. You have to give the bitmap of the image to this library and the library will retur

Ghayas Ahmad 47 Jan 5, 2023
LSPosed module to add Google Pixel features on Google Photos for any device.

Pixelify-Google-Photos LSPosed module to add Google Pixel features on Google Photos for any device. LSPosed module repo Development repo Steps to use:

null 502 Jan 9, 2023
Encrypted Photo Safe for Android

Encrypt your photos on your device and keep them safe from others. About Photok is a free Photo-Safe. It stores your photos encrypted on your device a

Leon Latsch 265 Dec 26, 2022
Android Camera Application for Exposure Fusion Algorithm and more

Android Camera Application for Exposure Fusion Algorithm and more

Seri Lee 10 Nov 14, 2021
🔥 Android OpenGL Camera 2.0 实现 30 种滤镜和抖音特效

OpenGLCamera2 Android OpenGL Camera 2.0 项目使用 OpenGL ES 3.0 实现 30 种相机滤镜和特效,支持相机预览和拍照,左右滑动切换滤镜。 对 OpenGL ES 3.0 不熟悉的同学可以移步 Android OpenGLES 3.0 开发系统性学习教

字节流动 794 Dec 23, 2022
Bring out the best in your phone's camera

DNG Processor How does this app work? It waits for new RAW images captured using a supported camera app, and then processes them in the background. It

Amir Zaidi 97 Dec 15, 2022
Generate Mermaid graphs from docker-compose files (in kotlin).

docker-compose-viz with Mermaid Generate Mermaid graphs from docker-compose files (in kotlin). Inspired from https://github.com/pmsipilot/docker-compo

Lucy Linder 12 Nov 22, 2022
v9 is an Android library that provides the ability to dynamically resize Path objects as you would 9-patch bitmaps

v9 is an Android library that provides the ability to dynamically resize Path objects as you would 9-patch bitmaps. In the example below, the chat bubble is dynamically resized while preserving the corners:

Romain Guy 304 Dec 27, 2022
Android library project for cropping images

I guess people are just cropping out all the sadness An Android library project that provides a simple image cropping Activity, based on code from AOS

Jamie McDonald 4.5k Jan 7, 2023
An android image compression library.

Compressor Compressor is a lightweight and powerful android image compression library. Compressor will allow you to compress large photos into smaller

Zetra 6.7k Dec 31, 2022
A simple image cropping library for Android.

SimpleCropView The SimpleCropView is an image cropping library for Android. It simplifies your code for cropping image and provides an easily customiz

Issei Aoki 2.5k Dec 28, 2022
Customizable Android full screen image viewer for Fresco library supporting "pinch to zoom" and "swipe to dismiss" gestures. Made by Stfalcon

This project is no longer supported. If you're able to switch from Fresco to any other library that works with the Android's ImageView, please migrate

Stfalcon LLC 1.8k Dec 19, 2022
Dali is an image blur library for Android. It contains several modules for static blurring, live blurring and animations.

Dali Dali is an image blur library for Android. It is easy to use, fast and extensible. Dali contains several modules for either static blurring, live

Patrick Favre-Bulle 1k Dec 1, 2022
An image resizing library for Android

Resizer Inspired by zetbaitsu's Compressor, Resizer is a lightweight and easy-to-use Android library for image scaling. It allows you to resize an ima

Kakit Ho 426 Dec 22, 2022
Simple android image popup Library

Android Image Popup Show image as a popup on a click event or any event. Simply set the image as drawable and thats it!!!. And also you can set width,

Chathura Lakmal 64 Nov 15, 2022
Image loading library for Android

Image Loader Image loader library for Android. Deprecated. See Glide. Features Image transformations Automatic memory and storage caching Ability to l

Yuriy Budiyev 19 May 28, 2022