Compose Color Picker

400 stars
by GoDaddy

Jetpack Compose Android Color Picker 🎨

View on GitHub

Documentation

Android Jetpack Compose Color Picker 🎨

Maven Central

A component that provides two different HSV color pickers, written in Jetpack Compose.

  1. ClassicColorPicker - Square picker with alpha channel
  2. HarmonyColorPicker - Circular wheel with harmony modes (ie complementary, triadic, analogous, shades, monochromatic, tetradic)

https://user-images.githubusercontent.com/9973046/154516879-495a6816-9595-49b9-beaf-dafc2e1110ec.mp4

https://user-images.githubusercontent.com/9973046/154515203-f0818a14-3bb0-4e5a-91fc-f3cac2e2e770.mp4

How to get started

Add the dependency to your build.gradle file:

implementation 'com.godaddy.android.colorpicker:compose-color-picker:<latest-version>'

// with Android ColorInt extensions
implementation 'com.godaddy.android.colorpicker:compose-color-picker-android:<latest-version>'
// desktop jvm version
implementation 'com.godaddy.android.colorpicker:compose-color-picker-jvm:<latest-version>'

Add ClassicColorPicker to your Compose hierarchy:

import com.godaddy.android.colorpicker.HsvColor

Column {
    ClassicColorPicker(
        onColorChanged = { color: HsvColor ->
            // Do something with the color
        }
    )
}

Or add the HarmonyColorPicker to your Compose hierarchy for an HSV color wheel implementation:

 HarmonyColorPicker(
    harmonyMode = harmonyMode.value,
    modifier = Modifier.size(400.dp),
    onColorChanged = { color ->
        currentColor.value = color
        extraColors.value = color.getColors(colorHarmonyMode = harmonyMode.value)
})

The HarmonyColorPicker allows for you to set a certain ColorHarmonyMode on the wheel.
This will then display multiple magnifiers on top of the wheel for the different harmony modes: ie complementary, triadic, analogous, shades, monochromatic, tetradic.
If you wish to not display other magnifiers - set ColorHarmonyMode.NONE as your harmonyMode on the wheel.

ClassicColorPicker:

Customizing the control

Size

To change the size of the control, pass in the Modifier option:

import com.godaddy.android.colorpicker.HsvColor

ClassicColorPicker(
    modifier = Modifier.height(200.dp),
    onColorChanged = { color: HsvColor ->
        // Do something with the color
    }
)

Alpha

To hide the alpha bar, change the showAlphaBar parameter:

import com.godaddy.android.colorpicker.HsvColor

ClassicColorPicker(
    showAlphaBar = false,
    onColorChanged = { color: HsvColor ->
        // Do something with the color
    }
)

HarmonyColorPicker

Customizing the control

Harmony Mode

To change the harmony mode of the picker, pass in a different mode into the function:

HarmonyColorPicker(
    harmonyMode = ColorHarmonyMode.SHADES,
    modifier = Modifier.size(400.dp),
    onColorChanged = { color ->
               // do stuff with new color
})

Size

To change the size of the control, pass in the Modifier option:

import com.godaddy.android.colorpicker.HsvColor

HarmonyColorPicker(
    modifier = Modifier.height(200.dp),
    onColorChanged = { color: HsvColor ->
        // Do something with the color
    }
)

Library Contribution Information

Code Formatting

This project uses spotless to enforce code formatting. Run ./gradlew spotlessApply to run formatting before committing.

Releases

  1. Update the version number in color-picker/build.gradle.kts
  2. Make a PR into main and get that merged
  3. Run "Deploy to Sonatype" GitHub Action.
  4. Login to Sonatype and "Close" release. After a few minutes, click "Release".
  5. Release should then be available for download on maven (might take like 30 min to propagate).
Dispatch Newsletter
Be the first to discover new Compose libraries
Curated Insights
Digest in 5 minutes or less
Android Analysis
Entertaining takes on happenings
Insider Tips
From top Android developers
Hidden Gems
You won't find elsewhere
"
"Dispatch has been my go-to resource lately to keep up with Compose. It's packed with useful information while being fun at the same time. The Insider Insight is my favorite section."
— Subhrajyoti Sen
Android Engineer @ Motive | GDE for Android
Join thousands of Android devs who look forward to Dispatch every week