如何在Android中使用TextView显示圆形文本

时间:2012-10-31 07:31:34

标签: android android-layout textview

我想在我的android应用程序中显示带有圆形形状的文本。我知道它是用自定义textview完成的,但是一些伙伴可以给我正确的代码。我还附加了我想要的那种类型的图像。

enter image description here

7 个答案:

答案 0 :(得分:18)

您可以尝试这个经过测试和完整工作的代码:

 public class MainActivity extends Activity {
      @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
       setContentView(new GraphicsView(this));}

  static public class GraphicsView extends View {
     private static final String QUOTE = "This is a curved text";
     private Path circle;
     private Paint cPaint;
     private Paint tPaint;

 public GraphicsView(Context context) {
  super(context);

  int color = Color.argb(127, 255, 0, 255);

  circle = new Path();
  circle.addCircle(230, 350, 150, Direction.CW);

  cPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
  cPaint.setStyle(Paint.Style.STROKE);
  cPaint.setColor(Color.LTGRAY);
  cPaint.setStrokeWidth(3);

  setBackgroundResource(R.drawable.heart);

  tPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
  tPaint.setStyle(Paint.Style.FILL_AND_STROKE);
  tPaint.setColor(Color.BLACK);
  tPaint.setTextSize(50);}


  @Override
     protected void onDraw(Canvas canvas) {
     canvas.drawTextOnPath(QUOTE, circle, 485, 20, tPaint);} 
                                        } }

输出将是:

enter image description here

希望得到这个帮助。

答案 1 :(得分:6)

创建自定义视图并覆盖onDraw。在onDraw中,创建一个路径并使用drawTextOnPath。像这样的东西。 textToDraw是您要显示的文本。油漆是你想要的任何油漆。

@Override onDraw(Canvas canvas){
    Path path = new Path();
    path.addCircle(x, y, 200, Path.Direction.CW);
    canvas.drawTextOnPath(textToDraw, path, textX, textY, paint);
}

http://developer.android.com/training/custom-views/index.html http://developer.android.com/reference/android/graphics/Canvas.html#drawTextOnPath(java.lang.String, android.graphics.Path, float, float, android.graphics.Paint)

答案 2 :(得分:4)

您可以在SDK目录中查看与Android SDK捆绑在一起的APIDemo源代码。

示例“Graphics / Text Align”(文件TextAlign.java)显示如何沿路径显示文本: Screen capture of the path

然后你可以调整它来构建你的屏幕。

答案 3 :(得分:3)

您已使用onDraw方法中的自定义视图实现它:

Path path = new Path();
path.addCircle(x, y, radius, Path.Direction.CW);
myCanvas.drawTextOnPath(myText, path, offset, 0, myPaint);

答案 4 :(得分:3)

您必须像这样创建自己的对象“查看”

public class YourView extends View {
    private static final String YOUR_TEXT = "something cool";
    private Path _arc;

    private Paint _paintText;

    public YourView(Context context) {
      super(context);

      _arc = new Path();
      RectF oval = new RectF(50,100,200,250);;
      _arc.addArc(oval, -180, 200);
      _paintText = new Paint(Paint.ANTI_ALIAS_FLAG);
      _paintText.setStyle(Paint.Style.FILL_AND_STROKE);
      _paintText.setColor(Color.WHITE);
      _paintText.setTextSize(20f);

    }

    @Override
    protected void onDraw(Canvas canvas) {
      canvas.drawTextOnPath(YOUR_TEXT, _arc, 0, 20, _paintText);
      invalidate();
    }
}

然后将它用作TextView :)希望这个帮助

答案 5 :(得分:1)

尝试以下代码..

onDraw(Canvas canvas){
 Path path = new Path();
 path.addArc(oval, startAngle, sweepAngle) 
 path.addArc(oval, 0, 180) 
 }

这可能有效......

答案 6 :(得分:-10)

您无需进行自定义视图。 找到正确的TypeFace,将其放入您的项目并设置为TextView

或使用microsoft office word art并将图像复制到项目中

enter image description here