如何在Android中绘制多行文本并在画布上旋转它

时间:2014-08-07 09:18:18

标签: android android-layout android-canvas android-custom-view android-drawable

我想使用画布在我的自定义视图上实现以下屏幕设计。另外,我需要根据X,Y坐标设置多行文本。

enter image description here

最好的方法是什么

1)使用静态布局并旋转 2)TextView +线性布局和旋转。

使用静态布局,我可以编写和旋转多行文本,但它不会根据X,Y值放置

下面是我的代码

TextPaint tp = new TextPaint();
    tp.setColor(Color.RED);
    tp.setTextSize(50);
    tp.setAntiAlias(true);
    StaticLayout mTextLayout = new StaticLayout("My Sample multiline text", tp, canvas.getWidth() - 300, Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
    canvas.save();

    canvas.translate(posX, posY);
    canvas.translate(-posX, -posY);
    canvas.rotate(90,posX, posY);
    mTextLayout.draw(canvas);
    canvas.restore();

欢迎提出任何建议或样本。在此先感谢。

2 个答案:

答案 0 :(得分:0)

将PivotX和PivotY设置为零,解决了旋转90F后Textview Position跳转的问题。以下是适用于我的代码。

private void addTextViewOnCanvas(Canvas canvas) {

    LinearLayout layout = new LinearLayout(_context);
    TextView textView = new TextView(_context); 
    textView.setVisibility(View.VISIBLE);
    textView.setText("Hello Multiline text world .............");
    textView.setWidth(canvas.getWidth() - 100);
    textView.setBackgroundColor(Color.YELLOW);
    textView.setPivotX(0);
    textView.setPivotY(0);
    textView.setRotation(90F);
    layout.addView(textView);
    layout.measure(canvas.getWidth(), canvas.getHeight());
    layout.layout(0, 0, canvas.getWidth(), canvas.getHeight());

    // To place the text view somewhere specific:
    canvas.translate(_PosX, _PosY);
    layout.draw(canvas);

}

答案 1 :(得分:-2)

如果你愿意的话,我相信你可以在相对/线性布局中使用简单的旋转TextView来实现类似的东西。

    <TextView
        android:id="@+id/sidewaysText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:lines="2"
        android:rotation="90"
        android:text="My sample multiline text"
        android:textColor="#FF0000" />

此外,使用View中已经编写的android旋转功能,几乎肯定会比你或我自己写的更有效。

祝你好运!