java如何改变Android画布的输出。drawTextOnPath()
我是Android新手,我编写了以下示例代码
public class Circle extends View {
Paint paint = new Paint();
Path path = new Path();
private static final String s = "Hello world example";
public Circle(Context context) {
super(context);
paint.setColor(Color.BLACK);
paint.setStyle(Style.STROKE);
paint.setStrokeWidth(2);
paint.setAntiAlias(true);
paint.setTextSize(30);
}
public void onDraw(Canvas c) {
path.addCircle(getWidth()/2, getHeight()/2, 180, Direction.CW);
c.drawTextOnPath(s, path, 0, 10, paint);
setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
}
Canvas.drawTextOnPath()
显示的是从右侧开始的文本(我指的是正X轴)。我想按时钟顺序从顶部显示文本。我想更改文本的起始位置。我对安卓Canvas.translate()
和Canvas.scale()
感到困惑。或者我应该使用Canvas.rotate()
?为了清楚地理解我的问题,我粘贴了下面的输出
我想以这种形式显示输出
# 1 楼答案
可以使用圆弧代替圆:
Path path = new Path(); RectF rect = new RectF(width/2 - radius, height/2 - radius, width/2 + radius, height/2 + radius); path.addArc(rect 270, 270); canvas.drawTextOnPath(msg., path, 0, 0, paint);
使用矩阵可以平移、旋转和缩放路径。 例如,上面的代码将从第一个象限开始绘制文本,即从(y,0)开始。要以顺时针方向从(-y,0)开始绘图
# 2 楼答案
通过在应用和
Canvas
方法之前在代码中添加Canvas.rotate(float degrees, float px, float py)
,我终于解决了我的Canvas
问题。下面是代码我以前试过
Canvas.rotate(float degrees)
,但没有成功。然而,Canvas.rotate(float degrees, float px, float py)
成功了