SpannableString图片无法上下居中的问题

2023-04-03  本文已影响0人  寻水的鱼Chock

图文混排时SpannableString设置ImageSpan遇见上下不居中的问题,做一个简单的记录。

解决方案

新增CenterAlignImageSpan.kt

class CenterAlignImageSpan(d: Drawable) : ImageSpan(d) {
    override fun draw(canvas: Canvas, text: CharSequence?, start: Int, end: Int, x: Float, top: Int, y: Int, bottom: Int, paint: Paint) {
        val fm: Paint.FontMetricsInt = paint.fontMetricsInt
        val transY = (y + fm.descent + y + fm.ascent) / 2 - drawable.bounds.bottom / 2
        canvas.save()
        canvas.translate(x, transY.toFloat())
        drawable.draw(canvas)
        canvas.restore()
    }
}

使用

val drawable = context.resources.getDrawable(R.drawable.ic_msg_red_pack)
drawable.setBounds(0, 0, 13.dpToPx(), 13.dpToPx())
val imageSpan = CenterAlignImageSpan(drawable)
spannedString.setSpan(
    imageSpan,
    7,
    8,
    Spannable.SPAN_INCLUSIVE_EXCLUSIVE
)
如果本文对你有帮助就点个赞支持下吧~~~
上一篇 下一篇

猜你喜欢

热点阅读