0

TextView の一部を非表示にしたい。具体的には、ユーザーに数学の問題を提示します。

9 * 9 = 81

81そして目立たないようにしたい。ユーザーが正解を入力すると、数字の「8」と「1」が表示されます。

透明色 ( #00000000Color.TRANSPARENTの両方)を使用しようとしましたがTextAppearanceSpan、KindleFire デバイスとエミュレーターを除くすべてのデバイスとエミュレーターで完全に機能します。ForegroundColorSpan

Kindle Fire では、「81」が濃い灰色で表示されます。ラスタライザーはLinearLayout、私のActivity.

ここに画像の説明を入力

私の質問は、TextViewどちらTextAppearanceSpanも使用せずにテキストの一部を非表示にするにはどうすればよいForegroundColorSpanですか? テキストを正しく測定するが、それをペイントしない別の「スパン」はありますか?

アップデート

私は、(タイトルから判断して)助けになるかもしれないいくつかの神秘的なRasterizerSpanとが存在することを発見しました。MetricAffectingSpan

ご覧のとおり、RasterizerSpan の唯一の意味は、Rasterizer を TextPaint オブジェクトに設定することです。

    public void updateDrawState(TextPaint ds) {
    ds.setRasterizer(mRasterizer);
}

私はそれが有望だと思いました.一種の「無効な」ラスタライザー(何もしないだけです)を設定できれば、このテキストは見えなくなります。不運にも

new RasterizerSpan(null); // (set mRasterizer to null)

助けにはなりませんでした。

私の別のアイデアは、「void」シェーダーを設定するカスタム ShaderSpan を実装することです。

    public void updateDrawState(TextPaint ds) {
    ds.setShader(myCustomVoidShader);
}

しかし、「何も生成しない」シェーダーを作成する方法がわかりません。

4

3 に答える 3

3

updateDrawState()あなたのオーバーライドとsetXferMode()ForegroundColorSpanの呼び出しが機能するかどうかを確認します。

public class TransparentSpan extends ForegroundColorSpan {
    private final PorterDuffXfermode MODE = new PorterDuffXfermode(PorterDuff.Mode.DST);

    public TransparentSpan(int color) {
        super(color);
    }

    @Override
    public void updateDrawState(TextPaint ds) {
        super.updateDrawState(ds);
        ds.setXfermode(MODE);
    }
}

申し訳ありませんが、テストするKindle Fireがありませんでした:)

于 2012-09-27T15:48:25.453 に答える
0

Android の可視性を使用しない理由 (true または false)。それはあなたが必要とするのと同じ仕事をしますか(またはSpanを使用するために嘘をつく特定の理由がありますか)?

于 2012-09-27T15:53:03.203 に答える