如何解决Android自定义视图2 layout调用结果为一个
我有以下代码:
class Label(context: Context): View(context) {
private val textPaint = Paint(ANTI_ALIAS_FLAG)
var text = ""
set(value) {
field = value
requestLayout()
invalidate()
}
var textSize
get() = textPaint.textSize
set(value) {
textPaint.textSize = value
requestLayout()
invalidate()
}
var textColor
get() = textPaint.color
set(value) {
textPaint.color = value
invalidate()
}
var typeface: Typeface?
get() = textPaint.typeface
set(value) {
textPaint.typeface = value
requestLayout()
invalidate()
}
override fun onMeasure(widthMeasureSpec: Int,heightMeasureSpec: Int) {
val textHeight = textPaint.fontMetrics.descent - textPaint.fontMetrics.ascent
val textWidth = textPaint.measureText(text)
setMeasuredDimension(textWidth.toInt(),textHeight.toInt())
println("ONMEASURE")
}
override fun onDraw(canvas: Canvas) {
canvas.drawText(text,0f,abs(textPaint.fontMetrics.ascent),textPaint)
println("DRAW")
}
}
我正在使用以下活动进行测试:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val label = Label(applicationContext)
label.text = "AHJJajjÚ"
label.textColor = Color.BLACK
label.textSize = 50f.toDP(applicationContext)
label.setBackgroundColor(-10000)
myLayout.addView(label)
button.setOnClickListener() {
label.text = text.text.toString()
label.textSize = size.text.toString().toFloat()
}
}
}
我在调用onMeasure()时打印ONMEASURE,而在调用onDraw()时打印DRAW。我有以下用于测试的布局:
每次我按下按钮时,都会得到正确的结果,但是ONMEASURE和DRAW只打印一次,而setText和setTextSize之后都调用requestLayout()和invalidate()。我对此行为有些担心,因为我希望这些呼叫会出现两次。
为什么我两次调用requestLayout()和invalidate()时只能得到一张ONMEASURE和DRAW的照片?
编辑:格式化和拼写错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。