【问题标题】:View color transition onScroll in Android在 Android 中查看 onScroll 的颜色过渡
【发布时间】:2017-08-02 00:16:17
【问题描述】:

我试图在向上滚动时将我的一些视图颜色从“color1”转换为“color2”,在向下滚动时反之亦然。

视图位于 CoordinateLayout 内部,而 Scroll Listener 实现位于 Custom Behaviour 内部。

当前实现 UpScroll:

    int balanceLabelTextColor = Color.rgb(
            (int) (Color.red(color1) * magicFactor),
            (int) (Color.green(color1) * magicFactor),
            (int) (Color.blue(color1) * magicFactor)
    );
    balanceLabel.setTextColor(balanceLabelTextColor);

当前实现 DownScroll:

    int balanceLabelTextColor = Color.rgb(
            (int) (Color.red(color2) * magicFactor),
            (int) (Color.green(color2) * magicFactor),
            (int) (Color.blue(color2) * magicFactor)
    );
    balanceLabel.setTextColor(balanceLabelTextColor);

'magicFactor' 根据滚动位置从 (0,1) 取值。

当您只向上或向下滚动时,这可以正常工作。当您在中途将滚动方向从上更改为下时,转换会触发,反之亦然。

正在寻找一种同时采用“color1”和“color2”并产生中间值以实现平滑颜色过渡的实现。

谢谢。

【问题讨论】:

    标签: android android-recyclerview android-animation android-coordinatorlayout


    【解决方案1】:

    听起来您正在寻找类似ColorUtils.blendARGB 的东西。

    使用给定的比例混合两种 ARGB 颜色。

    混合比为 0.0 将产生颜色 1,0.5 将产生均匀 blend,1.0会产生color2。

    @ColorInt
    public static int blendARGB(@ColorInt int color1, @ColorInt int color2,
            @FloatRange(from = 0.0, to = 1.0) float ratio) {
        final float inverseRatio = 1 - ratio;
        float a = Color.alpha(color1) * inverseRatio + Color.alpha(color2) * ratio;
        float r = Color.red(color1) * inverseRatio + Color.red(color2) * ratio;
        float g = Color.green(color1) * inverseRatio + Color.green(color2) * ratio;
        float b = Color.blue(color1) * inverseRatio + Color.blue(color2) * ratio;
        return Color.argb((int) a, (int) r, (int) g, (int) b);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-01
      • 2012-07-21
      • 2011-03-27
      • 1970-01-01
      • 1970-01-01
      • 2014-09-17
      • 1970-01-01
      相关资源
      最近更新 更多