Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android drawTextOnPath()未显示输出_Java_Android_Android Canvas_Drawtext - Fatal编程技术网

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);
  }
}