如何在 Android 中使用 textview 显示颠倒的文本?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/2558257/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How can you display upside down text with a textview in Android?
提问by Ravedave
How can you display upside down text with a textview in Android?
如何在 Android 中使用 textview 显示颠倒的文本?
In my case I have a 2 player game, where they play across from each other. I want to display test to the second player oriented to them.
在我的情况下,我有一个 2 人游戏,他们在那里互相比赛。我想向面向他们的第二个玩家显示测试。
This was the solution I implemented after AaronMs advice
这是我在 AaronMs 建议后实施的解决方案
The class that does the overriding, bab.foo.UpsideDownText
执行覆盖的类,bab.foo.UpsideDownText
package bab.foo;
import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.widget.TextView;
public class UpsideDownText extends TextView {
//The below two constructors appear to be required
public UpsideDownText(Context context) {
super(context);
}
public UpsideDownText(Context context, AttributeSet attrs)
{
super(context, attrs);
}
@Override
public void onDraw(Canvas canvas) {
//This saves off the matrix that the canvas applies to draws, so it can be restored later.
canvas.save();
//now we change the matrix
//We need to rotate around the center of our text
//Otherwise it rotates around the origin, and that's bad.
float py = this.getHeight()/2.0f;
float px = this.getWidth()/2.0f;
canvas.rotate(180, px, py);
//draw the text with the matrix applied.
super.onDraw(canvas);
//restore the old matrix.
canvas.restore();
}
}
And this is my XML layout:
这是我的 XML 布局:
<bab.foo.UpsideDownText
android:text="Score: 0"
android:id="@+id/tvScore"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFF"
>
</bab.foo.UpsideDownText>
采纳答案by Narayanan
in the xml file add:
在xml文件中添加:
android:rotation = "180"
in the respective element to display text upside down.
在相应的元素中颠倒显示文本。
for example:
例如:
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="TextView"
android:rotation="180"/>
回答by AaronM
I haven't tried doing this myself, but I think it should work.
我自己没有尝试过这样做,但我认为它应该有效。
Override the view's onDraw method, call it's super passing in the canvas, then after call the rotate method on the canvas passed to it, passing in either 180 or Math.PI, depending on whether it works in degrees or radians.
覆盖视图的 onDraw 方法,在画布中调用它的超级传递,然后在传递给它的画布上调用旋转方法后,传入 180 或 Math.PI,具体取决于它是以度还是弧度工作。
回答by Onur Topal
the below code is working perfectly (thanks by the way). try to add the missing constructor. if it is not working my the problem is android version main is 2.1
下面的代码运行良好(顺便说一下)。尝试添加缺少的构造函数。如果它不起作用我的问题是android版本主要是2.1
package p.c;
import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.TextView;
public class TextViewUD extends TextView {
public TextViewUD(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public TextViewUD(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public TextViewUD(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
@Override
protected void onDraw(Canvas canvas) {
canvas.save();
float py = this.getHeight()/2.0f;
float px = this.getWidth()/2.0f;
Log.d("testUD", String.format("w: %d h: %d ", this.getWidth(), this.getHeight()));
Log.d("testUD", String.format("w: %f h: %f ", py, px));
canvas.rotate(180, px, py);
super.onDraw(canvas);
canvas.restore();
}
}