Reputation: 952
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 :
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
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