Как вы можете отобразить перевернутый текст с помощью textview в Android? - PullRequest
28 голосов
/ 01 апреля 2010

Как отобразить перевернутый текст в режиме просмотра текста в Android?

В моем случае у меня есть игра на двоих, где они играют друг против друга. Я хочу показать тестирование второму игроку, ориентированному на них.


Это решение я реализовал после совета 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>

Ответы [ 3 ]

28 голосов
/ 20 июля 2013

в 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"/>
5 голосов
/ 01 апреля 2010

Я не пробовал делать это сам, но думаю, что это должно сработать.

Переопределите метод onDraw представления, вызовите его суперпередачу на холсте, затем после вызова метода rotate на холсте, переданном ему, передавая либо 180, либо Math.PI, в зависимости от того, работает ли он в градусах или радианах. 1003 *

3 голосов
/ 20 июня 2011

приведенный ниже код работает отлично (спасибо, кстати). попробуйте добавить отсутствующий конструктор. если он не работает, то проблема в том, что версия ОС 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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...