2011-12-05 58 views
4

我试图做一个应用程序,只是输出一堆文本到android屏幕,问题是它必须被镜像(将被视为一个“hud”)。textview中的镜像文本?

令人惊讶的是,在android 4.0中,你可以通过textview.setScaleX(-1)...在4.0之前做到这一点,我无法找到很多。 textview.setTextScaleX(-1)不起作用(实际上它有点作用,但只有一个字符出现,尽管它是镜像的)。 4.0方法也适用于我的手机(运行cm9的nexus)。

我经历了一些建议迷迷糊糊的,如使用AndroidCharacter.Mirror(),但没有成功,似乎IM左侧带有3个选项:

1)编写一个定制的(镜像)字体 2)学习如何覆盖onDraw(根据Android TextView mirroring (hud)?) 3)将其全部绘制到画布上。

第一个是合理的,我可以做到这一点,但它限制了我单一的语言(或很多工作)。第二个+第三个Im相当迷失,虽然我很确定我可以从我发现的几个例子中找出它(例如:Drawing mirror text on canvas)。

在我尝试2或3之前,有没有其他的选择我可能没有考虑?

+0

另一种选择是使用纯文本:http://stackoverflow.com/questions/3433641/翻转 - 反转 - 镜像 - 文本 - 使用css-only#评论50275863_3433641 – Pacerier

回答

7

林相当肯定这是不可能与4.0前的TextView。

一个镜像定制的TextView并不难:

package your.pkg; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.util.AttributeSet; 
import android.widget.TextView; 

public class MirroredTextView extends TextView { 

    public MirroredTextView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     canvas.translate(getWidth(), 0); 
     canvas.scale(-1, 1); 
     super.onDraw(canvas); 
    } 

} 

而且使用为:

<your.pkg.MirroredTextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Hello World" /> 
+0

谢谢你,我正在尝试类似的东西,但我打电话super.onDraw()第一,虽然它看起来像我做了一些其他错误也是如此! – Takigama

+0

它可以与预注册一起使用!至少在模拟器中。 – MrSnowflake

+0

显然它确实为2.2工作。 – MrSnowflake