From 3a1aa137a035244f281a40ca9fe7c39b4a36ae1f Mon Sep 17 00:00:00 2001 From: pubiqq Date: Tue, 11 Feb 2025 09:01:39 +0300 Subject: [PATCH] [FloatingActionButton] Use the current labelOpacity as the initial animation value --- .../ExtendedFloatingActionButton.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/java/com/google/android/material/floatingactionbutton/ExtendedFloatingActionButton.java b/lib/java/com/google/android/material/floatingactionbutton/ExtendedFloatingActionButton.java index bfe9e5de906..aa7b1ae0ef2 100644 --- a/lib/java/com/google/android/material/floatingactionbutton/ExtendedFloatingActionButton.java +++ b/lib/java/com/google/android/material/floatingactionbutton/ExtendedFloatingActionButton.java @@ -43,6 +43,7 @@ import android.view.ViewGroup.LayoutParams; import android.view.ViewGroup.MarginLayoutParams; import androidx.annotation.AnimatorRes; +import androidx.annotation.ColorInt; import androidx.annotation.IntDef; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -460,6 +461,15 @@ private void saveOriginalTextCsl() { originalTextCsl = getTextColors(); } + ColorStateList getOriginalTextColor() { + return originalTextCsl; + } + + @ColorInt + int getCurrentOriginalTextColor() { + return originalTextCsl.getColorForState(getDrawableState(), 0); + } + /** * Update the text color without affecting the original, client-set color. */ @@ -1417,7 +1427,9 @@ public AnimatorSet createAnimator() { if (spec.hasPropertyValues("labelOpacity")) { PropertyValuesHolder[] labelOpacityValues = spec.getPropertyValues("labelOpacity"); - float startValue = extending ? 0F : 1F; + final int originalAlpha = Color.alpha(getCurrentOriginalTextColor()); + final int currentAlpha = Color.alpha(getCurrentTextColor()); + float startValue = originalAlpha != 0 ? (float) currentAlpha / originalAlpha : 0f; float endValue = extending ? 1F : 0F; labelOpacityValues[0].setFloatValues(startValue, endValue); spec.setPropertyValues("labelOpacity", labelOpacityValues);