最近项目中需要使用到垂直居中的imagespan,在网上找到了相关的开源资源,但是发现现在网上的开源VerticalImageSpan都不能兼容lineSpaceExtra行高属性,一旦设置了lineSpaceExtra,那么ImageSpan位置就会发生偏移。于是我从TextView的源码入手,找到了一个能够兼容lineSpaceExtra的方法,其中最主要的思路就是利用了RelacementSpan的draw方法,参数“y”是每一行文本的baseLine,通过这个值,可以推算出ImageSpan居中时的位置,进而算出canvas的平移长度,达到真正的垂直居中。具体的源代码如下:
public class VerticalImageSpan extends ImageSpan {
public VerticalImageSpan(Drawable drawable) {
super(drawable);
}
/**
* update the text line height
*/
@Override
public int getSize(Paint paint, CharSequence text, int start, int end,
Paint

本文介绍了如何解决在Android中使用VerticalImageSpan时遇到的问题,当设置lineSpaceExtra行高属性后,ImageSpan位置会偏移。作者深入研究TextView源码,提出利用RelacementSpan的draw方法,通过计算baseLine来确定ImageSpan的居中位置,从而实现真正垂直居中的效果。
最低0.47元/天 解锁文章
741

被折叠的 条评论
为什么被折叠?



