Android直播间上下,Android直播间消息流图文混排

bVbIHqV

刚收到需求无脑想了想TextView加上ImageSpan就可以完美解决这个问题,做的时候发现不对,如果用户等级有100级,就要放置最少100张图片到APK里面,如果区分男女不同级别展示背景色不一致或者样式不一致,那就是灾难。

怎么办?

如果用多个View来实现,复杂度直线上升,单行文本没有问题,多行文本时候就是灾难,需要考虑的东西太多。

这时候想到之前自定义ImageSpan,让图片和文本对齐时候做的一些小操作,里面有Canvas对象,灵光乍现,直接在ImageSpan的onDraw方法里面绘制要显示的数字就可以了。

上代码:

···

@Override

public void draw(@NonNull Canvas canvas, CharSequence text,

int start, int end, float x,

int top, int y, int bottom, @NonNull Paint paint) {

// image to draw

Drawable b = getDrawable();

int halfWidth = (int) (b.getIntrinsicWidth()/2f);

// font metrics of text to be replaced

Paint.FontMetricsInt fm = paint.getFontMetricsInt();

int transY = (y + fm.descent + y + fm.ascent) / 2

- b.getBounds().bottom / 2;

canvas.save();

canvas.translate(x, transY);

b.draw(canvas);

canvas.restore();

canvas.drawText(level, x + halfWidth, y, levelTextPaint);

}

···

基本就可以解决上述问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值