2 回答

TA貢獻1810條經驗 獲得超4個贊
使用 aNestedScrollView并附加一個OnScrollChangeListener. 然后將其與ARGBEvaluator生成一種顏色,并將其設置為背景。我是憑記憶來的,但是類似:
final ArgbEvaluator evaluator = new ArgbEvaluator();
final colorStart = Color.GREEN;
final colorEnd = Color.BLUE;
nestedScrollView.setOnScrollChangedListener((view, scrollX, scrollY, oldX, oldY) -> {
final float height = (float) v.getHeight();
if(height <= 0) return;
final float progress = (float)((float)scrollY/v.getHeight());
background.setBackgroundColour((int)evaluator.evaluate(progress, startColor, endColor);
});

TA貢獻1829條經驗 獲得超4個贊
與已接受的答案類似,我在 Kotlin 中是這樣做的:
@RequiresApi(Build.VERSION_CODES.M)
@SuppressLint("RestrictedApi")
private fun setBackgroundAnimation(nestedScrollView: NestedScrollView) {
val evaluator = ArgbEvaluator()
val colorStart = context?.getColor(R.color.backgroundColor)
val colorEnd = Color.BLACK
var progress: Float
val velocity = 3
nestedScrollView.setOnScrollChangeListener { v, scrollX, scrollY, oldScrollX, oldScrollY ->
val scrollViewHeight = nestedScrollView.height
if (scrollViewHeight > 0) {
progress = (scrollY / scrollViewHeight.toFloat()) * velocity
nestedScrollView.setBackgroundColor(
evaluator.evaluate(
progress,
colorStart,
colorEnd
) as Int
)
}
}
}
添加回答
舉報