5

Android画面に一連のテキストを単に出力するアプリケーションを実行しようとしていますが、問題はミラーリングする必要があることです(「hud」として表示されます)。

驚くべきことに、Android 4.0 では、textview.setScaleX(-1) を実行するだけでテキストビューでこれを行うことができます... 4.0 より前ではあまり見つかりません。textview.setTextScaleX(-1) は機能しません (実際には機能しますが、ミラーリングされていますが、文字は 1 つしか表示されません)。4.0 のアプローチは、私の電話でも機能します (nexus は cm9 を実行しています)。

AndroidCharacter.Mirror() を使用して成功しなかったなど、いくつかの提案に出くわしましたが、3つのオプションが残っているようです:

1) カスタム (ミラー) フォントを作成します。2) onDraw をオーバーライドする方法を学びます ( Android TextView ミラーリング (hud) に従って? ) 3) すべてをキャンバスにペイントします。

1 つ目はもっともらしく、おそらく実行できますが、1 つの言語 (または多くの作業) に制限されます。2 番目と 3 番目はかなり迷いましたが、私が見つけたいくつかの例からそれを理解できると確信しています (たとえば、キャンバスにミラー テキストを描画する)。

2 または 3 を試みる前に、おそらく考慮していない他のオプションはありますか?

4

1 に答える 1

9

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" />
于 2011-12-05T06:28:26.067 に答える