Добавление текста слева и справа от холста - PullRequest
0 голосов
/ 15 мая 2019

Я создаю пользовательский холст, как показано ниже, с текстом, который находится слева, а также нужен текст справа, как показано на рисунке ниже.У меня есть часть текста на левой стороне, но как мне заставить текст отображаться слева и справа на холсте?

Вот что я хотел бы показать:

enter image description here

Текущий код:

private val textSize: Float = 70.toFloat()
private val groupSpacing = 100
private val paint = Paint()
init {
    paint.textSize = textSize
}
override fun onDrawOver(c: Canvas, parent: RecyclerView, state: RecyclerView.State) {
    for (i in 0 until parent.childCount) {
        val view = parent.getChildAt(i)
        val position = parent.getChildAdapterPosition(view)
        if (position == 0) {
            c.drawText("  Default", view.left.toFloat(),
                    view.top - groupSpacing / 2 + textSize / 3, paint)
        } else if (position == 1) {
            c.drawText("  Other", view.left.toFloat(),
                    view.top - groupSpacing / 2 + textSize / 3, paint)
        }
    }
}

Приведенный выше код показывает только значение по умолчанию

1 Ответ

0 голосов
/ 03 июня 2019

Мне удалось достичь этого с помощью:

class CustomItemDecorator(context: Context) : RecyclerView.ItemDecoration() {
    private var textSize: Float
    private val groupSpacing = 100
    private val paint = Paint()
    private val dragPaint = Paint()

    init {
        val dpSize: Int = context.resources.getDimensionPixelSize(R.dimen.decorator_font_size)
        textSize = dpSize * context.resources.displayMetrics.scaledDensity
        paint.textSize = textSize


        paint.color = context.resources.getColor(R.color.venue_grey)
        paint.typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD)

        dragPaint.textSize = textSize
        dragPaint.color = context.resources.getColor(R.color.venue_grey)
    }

    override fun onDrawOver(c: Canvas, parent: RecyclerView, state: RecyclerView.State) {
        super.onDrawOver(c, parent, state)
        for (i in 0 until parent.childCount) {
            val view = parent.getChildAt(i)
            val position = parent.getChildAdapterPosition(view)
            if (position == 0) {
                paint.textAlign = Paint.Align.LEFT
                c.drawText("DEFAULT", 35f,
                        view.top - groupSpacing / 2 + textSize / 3, paint)
                dragPaint.textAlign = Paint.Align.RIGHT
                c.drawText("Some Text that is off to the right", view.right.toFloat() - 30,
                        view.top - groupSpacing / 2 + textSize / 3, dragPaint)
            } else if (position == 1) {
                val x = view.x + 30
                view.width
                //the alignment below may need to be adjusted to 80 or 90?
                paint.textAlign = Paint.Align.LEFT
                c.drawText("OTHER", 35f,
                        view.top - groupSpacing / 2 + textSize / 3, paint)
            }
        }
    }

    override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {
        if (parent.getChildAdapterPosition(view) == 0 || parent.getChildAdapterPosition(view) == 1) {
            outRect.set(0, groupSpacing, 0, 0)
        }
    }
}
...