0

我想將我的視圖顏色中的少數從'color1'轉換爲'color2'上滾動,反之亦然下滾動。在Android中查看顏色過渡onScroll

視圖位於CoordinateLayout內部,Scroll Listener實現位於自定義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); 

'magicFactor' 從(0,1),這取決於滾動位置取值。

當您只向上或向下滾動時,此功能正常工作。當您從上到下更改中途滾動的方向時,過渡觸發器會反轉,反之亦然。

正在尋找一種同時採用'color1'和'color2'併爲平滑顏色過渡生成中間值的實現。

謝謝。

回答

2

聽起來像你正在尋找像ColorUtils.blendARGB

使用給定的比例在兩種ARGB顏色之間進行混合。

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); 
}