android - 在 setClickListener 期间以编程方式设置渐变不起作用。为什么?
问题描述
我以编程方式设置渐变(根据https://stackoverflow.com/a/52289927/3286489中共享的方法)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setTextGradient() // Set here, and it is working
btn_press_me.setOnClickListener {
// Do nothing
}
}
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
}
这行得通。但是,如果我搬进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
}
推荐阅读
- c# - 为什么 S3 在使用 StreamReader 进行后续调用后检索速度会提高?
- python - Groupby Pandas,根据日期差异计算多列
- c++ - 在另一个类定义中为一个类创建对象
- asp.net - 在配置服务中获取服务实例(不是通过 services.BuildServiceProvider())
- r - 删除警告消息“在缓存中发现多个类“tbl_df”;使用第一个,来自命名空间 'tibble' 也由 'memisc' 定义
- node.js - 将 ghost CMS 安装到 AWS Elastic Beanstalk Node js 应用程序中
- ios - 如何判断objective-c中我的文件系统上有一个有效的pdf文件?
- arrays - 代码在使用指针时产生额外的一行并且不读取第一个字符数组
- java - nextInt 对这段代码中的 Scanner 类做了什么?
- logback - Logback:谨慎模式下基于大小的文件轮换