Java Android drawTextOnPath()未显示输出
我有下面的代码Java Android drawTextOnPath()未显示输出,java,android,android-canvas,drawtext,Java,Android,Android Canvas,Drawtext,我有下面的代码 public class CompassActivity extends Activity { public class OuterCircle extends View { Paint paint = new Paint(); Path path = new Path(); private static final String s = "Hello world example"; public OuterCircle(Context
public class CompassActivity extends Activity {
public class OuterCircle extends View {
Paint paint = new Paint();
Path path = new Path();
private static final String s = "Hello world example";
public OuterCircle(Context context) {
super(context);
init();
}
private void init() {
paint.setColor(Color.WHITE);
paint.setStyle(Style.STROKE);
paint.setStrokeWidth(2);
paint.setAntiAlias(true);
}
private void drawDegreesOnCircle(Canvas c) {
path.addCircle(getWidth()/2, getHeight()/2, 180, Direction.CW);
c.drawTextOnPath(s, path, 0, 10, paint);
}
public void onDraw(Canvas c) {
int cx = getWidth()/2;
int cy = getHeight()/2;
c.drawCircle(cx, cy, 170, paint);
drawDegreesOnCircle(c);
}
}
}
圆画成功了。但是,不显示我指定的字符串。代码中没有错误或警告。我的代码中有什么遗漏吗?我试着在圆圈周围显示字符串。我被困在这里了D您缺少对
drawPath()的调用
我已通过添加
setLayerType(View.LAYER_TYPE_SOFTWARE, null)
要求使用上述方法以及
Canvas.drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint)
适用于Android API 11级或更高级别。字符串现在成功地显示在圆圈周围。这是正确的代码
public class CompassActivity extends Activity {
public class OuterCircle extends View {
Paint paint = new Paint();
Path path = new Path();
private static final String s = "Hello world example";
public OuterCircle(Context context) {
super(context);
init();
}
private void init() {
paint.setColor(Color.WHITE);
paint.setStyle(Style.STROKE);
paint.setStrokeWidth(2);
paint.setAntiAlias(true);
}
private void drawDegreesOnCircle(Canvas c) {
path.addCircle(getWidth()/2, getHeight()/2, 180, Direction.CW);
c.drawTextOnPath(s, path, 0, 10, paint);
setLayerType(View.LAYER_TYPE_SOFTWARE, null); // Required for API level 11 or higher.
}
public void onDraw(Canvas c) {
int cx = getWidth()/2;
int cy = getHeight()/2;
c.drawCircle(cx, cy, 170, paint);
drawDegreesOnCircle(c);
}
}
}
这是一个非常简单的示例,只需在显示中心以一定角度获取文本
public class DrawSomeText extends View {
Paint mPaint;
public DrawSomeText(Context context) {
super(context);
mPaint = new Paint();
mPaint.setColor(Color.BLACK);
}
@Override
public void onDraw(Canvas canvas) {
Path path = new Path();
path.moveTo(getWidth()/2, getHeight()/2);
path.lineTo(getWidth(), getHeight());
path.close();
canvas.drawPath(path, mPaint);
canvas.drawTextOnPath("Hello World", path, 0, 0, mPaint);
}
}
嗨,安德鲁·菲尔登,我已经按照你的建议修改了我的代码。但是,将绘制另一个圆,而不是显示字符串。我试图在我已经绘制的圆周围显示字符串。不知道出了什么问题,但每次绘制圆时,您似乎都在向路径添加圆。您应该将addCircle移动到init方法。也许这可以帮助你好@Ishtar,谢谢你的评论。但是,我已经通过在代码中添加setLayerType()修复了该解决方案。Android API级别11及更高版本需要setLayerType()。我已经在下面贴出了正确的答案。我希望这对某人有所帮助。添加工作:为什么需要软件渲染?来源?
public class DrawSomeText extends View {
Paint mPaint;
public DrawSomeText(Context context) {
super(context);
mPaint = new Paint();
mPaint.setColor(Color.BLACK);
}
@Override
public void onDraw(Canvas canvas) {
Path path = new Path();
path.moveTo(getWidth()/2, getHeight()/2);
path.lineTo(getWidth(), getHeight());
path.close();
canvas.drawPath(path, mPaint);
canvas.drawTextOnPath("Hello World", path, 0, 0, mPaint);
}
}