From 374ce4e5baa9e258fc7c1029239c64246706ac69 Mon Sep 17 00:00:00 2001 From: skydoves Date: Sat, 10 Jan 2026 15:53:21 +0900 Subject: [PATCH] Fix race condition for the initial color using selectorPositionInitialized --- .../skydoves/colorpickerview/sliders/AbstractSlider.java | 3 +++ .../com/skydoves/colorpickerview/sliders/AlphaSlideBar.java | 6 ++++++ .../colorpickerview/sliders/BrightnessSlideBar.java | 6 ++++++ 3 files changed, 15 insertions(+) diff --git a/colorpickerview/src/main/java/com/skydoves/colorpickerview/sliders/AbstractSlider.java b/colorpickerview/src/main/java/com/skydoves/colorpickerview/sliders/AbstractSlider.java index 2f6825e..9385332 100644 --- a/colorpickerview/src/main/java/com/skydoves/colorpickerview/sliders/AbstractSlider.java +++ b/colorpickerview/src/main/java/com/skydoves/colorpickerview/sliders/AbstractSlider.java @@ -57,6 +57,7 @@ abstract class AbstractSlider extends FrameLayout { protected int color = Color.WHITE; protected ImageView selector; protected String preferenceName; + protected boolean selectorPositionInitialized = false; public AbstractSlider(Context context) { super(context); @@ -206,6 +207,7 @@ public void setSelectorPosition(@FloatRange(from = 0.0, to = 1.0) float selector float x = (getWidth() * selectorPosition) - getSelectorSize() - getBorderHalfSize(); selectedX = (int) getBoundaryX(x); selector.setX(selectedX); + selectorPositionInitialized = true; } public void setSelectorByHalfSelectorPosition( @@ -214,6 +216,7 @@ public void setSelectorByHalfSelectorPosition( float x = (getWidth() * selectorPosition) - (getSelectorSize() * 0.5f) - getBorderHalfSize(); selectedX = (int) getBoundaryX(x); selector.setX(selectedX); + selectorPositionInitialized = true; } private float getBoundaryX(float x) { diff --git a/colorpickerview/src/main/java/com/skydoves/colorpickerview/sliders/AlphaSlideBar.java b/colorpickerview/src/main/java/com/skydoves/colorpickerview/sliders/AlphaSlideBar.java index d23e451..fa1fe92 100644 --- a/colorpickerview/src/main/java/com/skydoves/colorpickerview/sliders/AlphaSlideBar.java +++ b/colorpickerview/src/main/java/com/skydoves/colorpickerview/sliders/AlphaSlideBar.java @@ -101,6 +101,12 @@ public void updatePaint(Paint colorPaint) { @Override public void onInflateFinished() { + // Skip default positioning if the selector position was already set + // (e.g., via setInitialColor before layout completed) + if (selectorPositionInitialized) { + return; + } + int defaultPosition = getWidth() - selector.getWidth(); if (getPreferenceName() != null) { updateSelectorX( diff --git a/colorpickerview/src/main/java/com/skydoves/colorpickerview/sliders/BrightnessSlideBar.java b/colorpickerview/src/main/java/com/skydoves/colorpickerview/sliders/BrightnessSlideBar.java index fec08c4..03fa3b7 100644 --- a/colorpickerview/src/main/java/com/skydoves/colorpickerview/sliders/BrightnessSlideBar.java +++ b/colorpickerview/src/main/java/com/skydoves/colorpickerview/sliders/BrightnessSlideBar.java @@ -94,6 +94,12 @@ protected void updatePaint(Paint colorPaint) { public void onInflateFinished() { selector.post( () -> { + // Skip default positioning if the selector position was already set + // (e.g., via setInitialColor before layout completed) + if (selectorPositionInitialized) { + return; + } + int defaultPosition = getWidth() - selector.getWidth(); if (getPreferenceName() != null) {