为了账号安全,请及时绑定邮箱和手机立即绑定

更改滚动条上的背景颜色

更改滚动条上的背景颜色

红颜莎娜 2024-01-28 20:26:47
我有一个滚动视图,当用户滚动它时,我想慢慢地、逐渐地改变背景颜色。我怎样才能实现以下目标?
查看完整描述

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

});


查看完整回答
反对 回复 2024-01-28
?
浮云间

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

            )

        }

    }

}


查看完整回答
反对 回复 2024-01-28
  • 2 回答
  • 0 关注
  • 129 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信