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
Composablee function for simulate a 360º photo view

?? What's up! ??‍?? Bugs360 ?? ?? Simulating a 360º view ?? ?? With this you can work with pack of photos, simulating a 360º view ?? ?? Made in ?? ??

Sito Nimbus 1 Nov 23, 2021
Image Picker for Android 🤖

Image Picker for Android ??

Esa Firman 1k Dec 31, 2022
An image loading and caching library for Android focused on smooth scrolling

Glide | View Glide's documentation | 简体中文文档 | Report an issue with Glide Glide is a fast and efficient open source media management and image loading

Bump Technologies 33.2k Jan 7, 2023
A powerful image downloading and caching library for Android

Picasso A powerful image downloading and caching library for Android For more information please see the website Download Download the latest AAR from

Square 18.4k Jan 6, 2023
Powerful and flexible library for loading, caching and displaying images on Android.

Universal Image Loader The great ancestor of modern image-loading libraries :) UIL aims to provide a powerful, flexible and highly customizable instru

Sergey Tarasevich 16.8k Jan 8, 2023
An Android library for managing images and the memory they use.

Fresco Fresco is a powerful system for displaying images in Android applications. Fresco takes care of image loading and display, so you don't have to

Facebook 16.9k Jan 8, 2023
An Android transformation library providing a variety of image transformations for Glide.

Glide Transformations An Android transformation library providing a variety of image transformations for Glide. Please feel free to use this. Are you

Daichi Furiya 9.7k Dec 30, 2022
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 Jan 9, 2023
An Android transformation library providing a variety of image transformations for Picasso

Picasso Transformations An Android transformation library providing a variety of image transformations for Picasso. Please feel free to use this. Are

Daichi Furiya 1.7k Jan 5, 2023
Library to handle asynchronous image loading on Android.

WebImageLoader WebImageLoader is a library designed to take to hassle out of handling images on the web. It has the following features: Images are dow

Alexander Blom 102 Dec 22, 2022
Glide Bitmap Pool is a memory management library for reusing the bitmap memory

Glide Bitmap Pool About Glide Bitmap Pool Glide Bitmap Pool is a memory management library for reusing the bitmap memory. As it reuses bitmap memory ,

AMIT SHEKHAR 573 Dec 31, 2022
Andorid library that loads images asynchronously into cache using a thread pool

AndroidImageLoader AndroidImageLoader is a fork of the Image Loader component in libs-for-android. The AndroidImageLoader is an Android library that h

David Wu 63 Feb 19, 2019
🍂 Jetpack Compose image loading library which can fetch and display network images using Glide, Coil, and Fresco.

?? Jetpack Compose image loading library which can fetch and display network images using Glide, Coil, and Fresco.

Jaewoong Eum 1.4k Jan 2, 2023
Compose Image library for Kotlin Multiplatform.

Compose ImageLoader Compose Image library for Kotlin Multiplatform. Setup Add the dependency in your common module's commonMain sourceSet kotlin {

Seiko 45 Dec 29, 2022
Android Asynchronous Networking and Image Loading

Android Asynchronous Networking and Image Loading Download Maven Git Features Kotlin coroutine/suspend support Asynchronously download: Images into Im

Koushik Dutta 6.3k Dec 27, 2022
Image loading for Android backed by Kotlin Coroutines.

An image loading library for Android backed by Kotlin Coroutines. Coil is: Fast: Coil performs a number of optimizations including memory and disk cac

Coil 8.8k Jan 8, 2023
Adds touch functionality to Android ImageView.

TouchImageView for Android Capabilities TouchImageView extends ImageView and supports all of ImageView’s functionality. In addition, TouchImageView ad

Michael Ortiz 2.6k Jan 1, 2023
A circular ImageView for Android

CircleImageView A fast circular ImageView perfect for profile images. This is based on RoundedImageView from Vince Mi which itself is based on techniq

Henning Dodenhof 14.4k Jan 5, 2023
Custom shaped android imageview components

Shape Image View Provides a set of custom shaped android imageview components, and a framework to define more shapes. Implements both shader and bitma

Siyamed SINIR 2.6k Jan 8, 2023