Android 在setClickListener期间设置渐变时,以编程方式设置渐变不起作用。为什么?

Android 在setClickListener期间设置渐变时,以编程方式设置渐变不起作用。为什么?,android,gradient,Android,Gradient,我以编程方式设置渐变(按照中共享的方法) 这很有效。但是,如果我将setTextGradient()移动到setOnCLickListner中,为什么它不工作 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) btn_press_me.setOnClickListene

我以编程方式设置渐变(按照中共享的方法)

这很有效。但是,如果我将
setTextGradient()
移动到
setOnCLickListner
中,为什么它不工作

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    btn_press_me.setOnClickListener {
        setTextGradient()  // Move here and it is not working.
    }
}

private fun setTextGradient() {
    val paint: TextPaint = text_happy.paint
    val width = paint.measureText(text_happy.text.toString())

    val textShader: Shader = LinearGradient(
        0f, 0f, width, text_happy.textSize, intArrayOf(
            Color.parseColor("#F97C3C"),
            Color.parseColor("#FDB54E"),
            Color.parseColor("#64B678"),
            Color.parseColor("#478AEA"),
            Color.parseColor("#8446CC")
        ), null, TileMode.CLAMP
    )
    text_happy.paint.shader = textShader
}

显然,我需要在设置后使其无效

    private fun setTextGradient() {
        val paint: TextPaint = text_happy.paint
        val width = paint.measureText(text_happy.text.toString())

        val textShader: Shader = LinearGradient(
            0f, 0f, width, text_happy.textSize, intArrayOf(
                Color.parseColor("#F97C3C"),
                Color.parseColor("#FDB54E"),
                Color.parseColor("#64B678"),
                Color.parseColor("#478AEA"),
                Color.parseColor("#8446CC")
            ), null, TileMode.CLAMP
        )
        text_happy.paint.shader = textShader
        text_happy.invalidate()  // Add the invalidation here
    }
    private fun setTextGradient() {
        val paint: TextPaint = text_happy.paint
        val width = paint.measureText(text_happy.text.toString())

        val textShader: Shader = LinearGradient(
            0f, 0f, width, text_happy.textSize, intArrayOf(
                Color.parseColor("#F97C3C"),
                Color.parseColor("#FDB54E"),
                Color.parseColor("#64B678"),
                Color.parseColor("#478AEA"),
                Color.parseColor("#8446CC")
            ), null, TileMode.CLAMP
        )
        text_happy.paint.shader = textShader
        text_happy.invalidate()  // Add the invalidation here
    }