0

私の視点の色を上のスクロールで 'color1'から 'color2'に、下スクロールでその逆に移行しようとしています。Androidでの色の切り替えonScrollを表示

ビューは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」の両方をとり、滑らかな色の遷移の中間値を生成する実装を探していました。

ありがとうございました。

答えて

2

ColorUtils.blendARGBのようなものをお探しですか?

2つのARGBカラーを特定の比率でブレンドします。

ブレンド比が0.0の場合はcolor1、0.5の場合は ブレンド、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); 
} 
関連する問題