2010-04-01 96 views
27

如何在Android中使用textview显示颠倒的文本?如何在Android中使用textview显示颠倒的文本?

在我的情况下,我有一个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> 

回答

27

在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"/> 
+0

Hrm当我最初问这个问题不可用时。我在1.6版本,你知道这是否被添加到更高版本? – Ravedave 2013-07-23 14:43:50

+0

只适用于API 11+ – AndroidDev 2013-07-30 15:41:04

+0

试试看我的应用程序崩溃,, – 2015-12-28 03:06:59

5

我还没有尝试过这样做,但我认为它应该工作。

覆盖视图的onDraw方法,调用它的超级传递,然后调用传递给它的画布上的rotate方法,传递180或Math.PI,具体取决于它是以度或弧度运行。

+0

任何人有想法,为什么不工作? – Ravedave 2010-04-01 23:29:00

+4

您也可以在Y轴上按-1缩放:) – 2010-04-02 03:04:45

+0

谢谢我删除了我的评论,要求提供进一步的帮助,因为该代码无效:)。谢谢你的回答,它指明了我正确的方向。 – Ravedave 2010-04-02 04:39:57

3

下面的代码工作完美(顺便一提)。尝试添加缺少的构造函数。如果它不工作我的问题是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(); 
    } 
} 
+0

完美!对于较旧版本的Android也能正常工作! – Nick 2014-11-18 08:36:00