Remove reflection to get TextView color field (closes #2469)

This commit is contained in:
arkon 2020-01-09 21:32:30 -05:00
parent 044a4f7575
commit 5f2aaeac57

View file

@ -24,12 +24,12 @@ class PageIndicatorTextView(
private val strokeColor = Color.rgb(45, 45, 45) private val strokeColor = Color.rgb(45, 45, 45)
override fun onDraw(canvas: Canvas) { override fun onDraw(canvas: Canvas) {
textColorField.set(this, strokeColor) setTextColor(strokeColor)
paint.strokeWidth = 4f paint.strokeWidth = 4f
paint.style = Paint.Style.STROKE paint.style = Paint.Style.STROKE
super.onDraw(canvas) super.onDraw(canvas)
textColorField.set(this, fillColor) setTextColor(fillColor)
paint.strokeWidth = 0f paint.strokeWidth = 0f
paint.style = Paint.Style.FILL paint.style = Paint.Style.FILL
super.onDraw(canvas) super.onDraw(canvas)
@ -50,12 +50,4 @@ class PageIndicatorTextView(
super.setText(finalText, TextView.BufferType.SPANNABLE) super.setText(finalText, TextView.BufferType.SPANNABLE)
} }
private companion object {
// We need to use reflection to set the text color instead of using [setTextColor],
// otherwise the view is invalidated inside [onDraw] and there's an infinite loop
val textColorField = TextView::class.java.getDeclaredField("mCurTextColor").apply {
isAccessible = true
}!!
}
} }