web-dev-qa-db-ja.com

Androidのテキストビューで逆さまのテキストを表示するにはどうすればよいですか?

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>
29
Ravedave

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"/>
28
Narayanan

私はこれを自分でやろうとはしていませんが、うまくいくはずだと思います。

ビューのonDrawメソッドをオーバーライドし、キャンバスでスーパーパスを呼び出します。次に、渡されたキャンバスでrotateメソッドを呼び出した後、度またはラジアンのどちらで機能するかに応じて、180またはMath.PIを渡します。

5
AaronM

以下のコードは完全に機能しています(ちなみにありがとう)。不足しているコンストラクターを追加してみてください。それが機能していない場合、私の問題は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();
    }
}
3
Onur Topal