我试图在向下滚动时将我的几种视图颜色从'color1'转换为'color2',反之亦然。
视图位于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);
当前实施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'的实现,并为平滑的颜色过渡生成中间值。
感谢。
答案 0 :(得分:2)
听起来像是在找here之类的东西。
使用给定的比率在两种ARGB颜色之间进行混合。
混合比为0.0将导致颜色1,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);
}