Circular Hue
A hue ring wrapped around a <Panel1 />, so the panel sits inside the slider rather than beside it. Any children of <HueCircular /> are laid out in the middle of the ring — the panel here is simply sized to 70% and centered.
Code
import React, { useState } from 'react';import { View } from 'react-native';
import type { ColorFormatsObject } from 'reanimated-color-picker';import ColorPicker, { colorKit, HueCircular, Panel1, PreviewText, Swatches } from 'reanimated-color-picker';
import { useContainerBackgroundColor } from './components/BaseContainer';import Divider from './components/Divider';import { colorPickerStyle } from './components/colorPickerStyle';
// generate 6 random colors for swatchesconst customSwatches = new Array(6).fill('#fff').map(() => colorKit.randomRgbColor().hex());
export default function Example() { const [resultColor, setResultColor] = useState(customSwatches[0]);
const currentColor = useContainerBackgroundColor(customSwatches[0]);
// runs on the ui thread on color change const onColorChange = (color: ColorFormatsObject) => { 'worklet'; currentColor.value = color.hex; };
// runs on the js thread on color pick const onColorPick = (color: ColorFormatsObject) => { setResultColor(color.hex); };
return ( <View style={colorPickerStyle.pickerContainer}> <ColorPicker value={resultColor} sliderThickness={20} thumbSize={24} onChange={onColorChange} onCompleteJS={onColorPick} style={colorPickerStyle.picker} boundedThumb > <HueCircular containerStyle={{ justifyContent: 'center' }} thumbShape='pill'> <Panel1 style={{ borderRadius: 16, width: '70%', height: '70%', alignSelf: 'center' }} /> </HueCircular>
<Divider /> <Swatches style={colorPickerStyle.swatchesContainer} swatchStyle={colorPickerStyle.swatchStyle} colors={customSwatches} /> <Divider />
<PreviewText style={colorPickerStyle.previewTxt} colorFormat='hsl' /> </ColorPicker> </View> );}The colorPickerStyle object is shared by every example. Divider is a 1px line, and useContainerBackgroundColor only tints the modal of the example app.
import { Platform, StyleSheet } from "react-native";
const shadow = Platform.select({ web: { boxShadow: "rgba(0, 0, 0, 0.3) 0px 0px 2px" }, default: { shadowColor: "#000", shadowOffset: { width: 0, height: 1, }, shadowOpacity: 0.2, shadowRadius: 1.41,
elevation: 2, },});
export const colorPickerStyle = StyleSheet.create({ title: { textAlign: "center", fontFamily: "Quicksand", fontWeight: "bold", marginVertical: 20, color: "gray", }, picker: { gap: 20, }, pickerContainer: { alignSelf: "center", width: 300, backgroundColor: "#eee", padding: 20, borderRadius: 20, ...shadow, }, panelStyle: { borderRadius: 16, ...shadow, }, sliderStyle: { borderRadius: 20, ...shadow, }, sliderVerticalStyle: { borderRadius: 20, height: 300, ...shadow, }, sliderTitle: { color: "#000", fontWeight: "bold", marginBottom: 5, paddingHorizontal: 4, fontFamily: "Quicksand", }, previewStyle: { height: 40, borderRadius: 14, }, previewTxt: { color: "#707070", fontFamily: "Quicksand", }, inputStyle: { color: "#707070", paddingVertical: 2, borderColor: "#707070", fontSize: 12, marginLeft: 5, }, swatchesContainer: { alignItems: "center", flexWrap: "nowrap", gap: 10, }, swatchStyle: { borderRadius: 20, height: 30, width: 30, margin: 0, marginBottom: 0, marginHorizontal: 0, marginVertical: 0, },});