在规定区域内自动调整文字位置

该博客介绍了一个在涂鸦应用中自动调整文字位置的需求。为避免文字超出显示范围和相互重叠,提出了一个简化策略:文字优先显示在图形左侧,超出则移到右侧,若右侧仍超出则左移至边缘;垂直方向上,文字与图形顶部对齐,底部超出则上移至底部边缘。代码实现包括了矩形、圆和线的文字位置调整。博客总结指出,虽然无法确保所有文字都不重叠,但可以尽量减少重叠情况的发生。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

最近在做一个需求,就是涂鸦时,在绘制的图形旁边通过文字显示相关信息.先给大家看看最终的效果:

效果图

一开始的时候被这个问题难倒了,怎么找到合适的位置显示文字信息,让它们既不超出显示范围,又互不重叠?

解决方案

如果考虑不能重叠的问题,就需要在图形四周的位置遍历一遍直到没有跟其他文字重叠,加上绘制的图形是可以移动问题,这样问题就更复杂了.于是我只能简单化,寻找代价低又基本能满足要求的方式.

首先,定义一个适配规则:文字优先显示在左边,如果超出显示区域则直接显示在右边,这种右边的情况下如果也超出了显示区域,则往左边偏移文字文字,使其刚好在显示区域边上.确定了左右位置后,接着处理垂直方向,文字优先显示在跟图形最上边位置齐平的位置,如果文字底部超出显示区域,则往上偏移文字,使其底部刚好在显示区域底边.

以矩形为例,显示效果如下:

分析图

对照规则,标注如下:

文字优先显示在左边(图1,2,4,6,7,10),如果超出显示区域则直接显示在右边(图3,5),这种右边的情况下如果也超出了显示区域,则往左边偏移文字文字,使其刚好在显示区域边上(图9).确定了左右位置后,接着处理垂直方向,文字优先显示在跟图形最上边位置齐平的位置(除图8外的所有图形),如果文字底部超出显示区域,则往上偏移文字,使其底部刚好在显示区域底边(图8).

这样就限定了图像显示在规定区域内啦!

实现

最后给出主要代码的代码实现,包括了矩形,圆,线的文字位置调整:

String msg = getInfo();
        StaticLayout textStaticLayout = new StaticLayout(msg, mTextPaint, (int) getMaxWidth(msg, mTextPaint) + 1, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
        mTextBounds.set(0, 0, textStaticLayout.getWidth(), textStaticLayout.getHeight());
        float x = 0, y = 0;
        if 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值