我想使用画布在我的自定义视图上实现以下屏幕设计。另外,我需要根据X,Y坐标设置多行文本。
最好的方法是什么
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();
欢迎提出任何建议或样本。在此先感谢。
答案 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旋转功能,几乎肯定会比你或我自己写的更有效。
祝你好运!