代码之家  ›  专栏  ›  技术社区  ›  Aniket Shinde

在Android中查看Croll上的颜色转换

  •  0
  • Aniket Shinde  · 技术社区  · 8 年前

    视图位于CoordinateLayout内,滚动侦听器实现位于自定义 Behaviour

    当前实施UpScroll:

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

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

    当您只向上或向下滚动时,此操作效果良好。当您在从上到下的中途更改滚动方向时,转换将触发,反之亦然。

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

    谢谢

    1 回复  |  直到 8 年前
        1
  •  4
  •   adneal    8 年前

    听起来你在找 ColorUtils.blendARGB .

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

    @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);
    }
    
    推荐文章