Проблемный клип уже установлен на Canvas в onDraw - PullRequest
0 голосов
/ 23 октября 2018

Я вложил в подкласс TextView, чтобы предоставить пользовательский onDraw.Но к холсту применена область обрезки, которая не имеет смысла: x настроен на что-то значительно выходящее за границы просмотра.Я думаю , что мешает моим целям.

override fun onDraw(canvas: Canvas) {
    super.onDraw(canvas)
    // draw numberLabel
    if (numberLabel == 0)
        return
    val right = this.width - this.resources.getDimension(R.dimen.topNavBadgeEndMargin)
    // top needs to add the top margin and estimated text height
    val top = this.resources.getDimension(R.dimen.topNavBadgeTopMargin) + this.badgePaint.textSize
    canvas.drawText(numberLabel.toString(), right, top, this.badgePaint)
    val r = Rect()
    canvas.getClipBounds(r)
    Log.d("TopNav", "canvas.clipBounds: $r")
}

Напечатано Logcat:

D / TopNav: canvas.clipBounds: Rect (524187, 0 - 524389,147)

К вашему сведению, я также пытался нарисовать круг r = 50 center = (100,100), и он не отображается.Так что поможет: а) почему это происходит?б) Я знаю, что нет способа сбросить область клипа, но есть ли способ, который бы мне помог?

1 Ответ

0 голосов
/ 23 октября 2018

Похоже, что если вы переопределяете onDraw в TextView, вам нужно сместить на scrollX (вероятно, должно быть также и scrollY, хотя оно было равно нулю).scrollX было слишком большим int, и я понятия не имею, почему он будет отличным от нуля в TextView, который не нуждается в прокрутке.

    val right = this.scrollX + this.width - this.resources.getDimension(R.dimen.topNavBadgeEndMargin)

Если у вас есть несколько операций, то canvas.translate обернутый save и restore, вероятно, помогают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...