我有一个滚动视图,当用户滚动它时,我想慢慢地逐渐改变背景颜色。我如何实现以下操作?
tjrkku2a1#
使用一个NestedScrollView并附加一个OnScrollChangeListener。然后将其与一个ARGBEvaluator组合生成一种颜色,并将其设置为背景。我将根据记忆进行操作,但类似于:
NestedScrollView
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); });
7bsow1i62#
与公认的答案相似,我在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 ) } } }
2条答案
按热度按时间tjrkku2a1#
使用一个
NestedScrollView
并附加一个OnScrollChangeListener
。然后将其与一个ARGBEvaluator
组合生成一种颜色,并将其设置为背景。我将根据记忆进行操作,但类似于:7bsow1i62#
与公认的答案相似,我在Kotlin的回答是这样的: