2010-04-01 28 views
27

¿Cómo se puede visualizar el texto boca abajo con una vista de texto en Android?¿Cómo se puede visualizar el texto boca abajo con una vista de texto en Android?

En mi caso, tengo un juego de 2 jugadores, donde juegan uno frente al otro. Quiero mostrar la prueba al segundo jugador orientado a ellos.


Esta fue la solución que he implementado después de consejos AaronMs

La clase que hace el primordial, 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(); 
    } 
} 

y este es mi diseño 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> 

Respuesta

27

en el archivo xml Añadir:

android:rotation = "180" 

en el elemento respectivo para mostrar el texto al revés.

por ejemplo:

<TextView 
     android:id="@+id/textView1" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="center" 
     android:text="TextView" 
     android:rotation="180"/> 
+0

Hrm Cuando originalmente hice esta pregunta que no estaba disponible. Estaba en 1.6 ¿sabes si esto se agregó a una versión posterior? – Ravedave

+0

Sólo disponible en 11+ API – AndroidDev

+0

Pruébelo Mi aplicación se estrelló ,, –

5

No he intentado hacerlo yo solo, pero creo que debería funcionar.

Anula el método onDraw de la vista, llámalo súper aprobado en el lienzo y luego llama al método de rotación en el lienzo que se le pasa, pasando 180 o Math.PI, dependiendo de si funciona en grados o radianes.

+0

Alguien tiene idea de por qué esto no funciona? – Ravedave

+4

Sólo puede escalar por -1 en el eje Y también :) Gracias –

+0

Me quité el comentario de solicitar más ayuda, ya que el código no funcionó :). Gracias por la respuesta, me indicó la dirección correcta. – Ravedave

3

el siguiente código funciona a la perfección (gracias por cierto). intenta agregar el constructor faltante. si no está funcionando mi problema es la versión androide principal es 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(); 
    } 
} 
+0

¡Perfecto! ¡Funciona bien para versiones anteriores de Android también! – Nick

Cuestiones relacionadas