yams
yams

Reputation: 952

Adding text on the left and right sides of Canvas

I'm creating a custom canvas as shown below with Text that is on the left side and also need text on the right as shown in the image below. I've got part of the text on the left side but how do I get the text to show on the left and right in a canvas?

Here's what I'd like to show :

enter image description here

Current Code:

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)
        }
    }
}

The code above only shows Default

Upvotes: -1

Views: 394

Answers (1)

yams
yams

Reputation: 952

I was able to achieve this via :

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)
        }
    }
}

Upvotes: -1

Related Questions