【发布时间】:2016-04-01 22:24:58
【问题描述】:
我创建了一个允许用户使用文本(包括表情符号)进行绘画的应用程序。用户可以根据自己的喜好旋转和调整文本大小。当用户旋转包含表情符号的文本时会出现此问题。
如您所见,存在不必要的重叠。我推断这是因为我绘制了两次文本以实现边框效果。有趣的是,如果文本大小超过一定数量,问题就会自行解决。这可以在最底部的测试中看到。
这是绘制上图的代码:
public void draw(Canvas c, int x, int y) {
Rect re = new Rect();
Paint p = new Paint();
p.setColor(this.color);
p.setTextSize(this.GetSize());
p.getTextBounds(text, 0, text.length(), re);
p.setAntiAlias(true);
c.save();
c.rotate(rotation_deg, x, y);
c.drawText(text, x - re.width() / 2, y + ((re.height() - re.bottom) - re.height() / 2), p);
p.setStyle(Paint.Style.STROKE);
p.setColor(color2);
c.drawText(text, x - re.width() / 2, y + ((re.height() - re.bottom) - re.height() / 2), p);
c.restore();
}
删除第一个绘图命令修复了表情符号问题,但我只得到了文字笔划。
如何旋转包含表情符号的文本?
一种可能的解决方案是先绘制位图,然后旋转位图,但此过程会浪费内存和时间。
【问题讨论】:
标签: java android drawing android-canvas