Androidのテキストビューで逆さまのテキストを表示するにはどうすればよいですか?
私の場合、2人用のゲームがあり、お互いに向かい合ってプレイします。彼らに向けられた2番目のプレイヤーにテストを表示したいと思います。
これは、AaronMsのアドバイスの後に実装したソリューションでした
オーバーライドを行うクラス、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();
}
}
そしてこれは私の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>
xmlファイルに次を追加します。
Android:rotation = "180"
それぞれの要素でテキストを上下逆に表示します。
例えば:
<TextView
Android:id="@+id/textView1"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:gravity="center"
Android:text="TextView"
Android:rotation="180"/>
私はこれを自分でやろうとはしていませんが、うまくいくはずだと思います。
ビューのonDrawメソッドをオーバーライドし、キャンバスでスーパーパスを呼び出します。次に、渡されたキャンバスでrotateメソッドを呼び出した後、度またはラジアンのどちらで機能するかに応じて、180またはMath.PIを渡します。
以下のコードは完全に機能しています(ちなみにありがとう)。不足しているコンストラクターを追加してみてください。それが機能していない場合、私の問題は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();
}
}