3

たくさんのテキストビューを備えたAndroidプログラムがあります。最初は、これらのビューのすべてに影がありません。

特定のトグルボタンを押すと、これらのtextViewが目立つようになります。

理想的には、テキストシャドウグロー効果を追加したかったのです。これは、textView.setShadowLayer(radius、dx、dy、color)で問題なく正常に実行されました。

問題は、同じトグルボタンをもう一度押すと(影が表示される)、テキストが強調表示されないように影を削除する必要があることです。

シャドウレイヤーを半径0、透明色#00FFFFFF、#00000000、および色#FFFFFFFF、#FF000000に設定しようとしました。ただし、これらのいずれも、textViewを元の外観に戻すことはできません。

影を取り除く方法についてのアイデア。(実際に削除する必要はありません。テキストを追加する前と同じように表示したいだけです)

主な目標は、トグルボタンを使用して、特定のtextViewのテキストの強調表示をオン/オフにすることです。シャドウを使用する以外の方法も利用できます。理想的にはシャドウを使用したいのですが、テキストを強調する他のアイデアは問題ありません。

(この部分は、textLayer.setShadow(0,0,0,0)で受け取った回答の後に追加されました);

レイアウトxmlのtextViewにこのスタイルを使用しています

<style name="second">
    <item name="android:textColor">@drawable/buttonBabyBlue</item>
    <item name="android:textStyle">bold</item>
    <item name="android:textSize">@dimen/second_text_size</item>
    <item name="android:lines">1</item>
    <item name="android:background">@drawable/baseGray</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:layout_width">0dip</item> 
    <item name="android:layout_weight">8.5</item> 
    <item name="android:gravity">bottom|left</item>
    <item name="android:layout_gravity">bottom</item>
</style>

ビューに影を付けるボタンを押すと

text.setShadowLayer(GLOW_RADIUS, GLOW_DX, GLOW_DY, R.drawable.buttonBabyBlue);
text.setTextColor(R.drawable.baseGray);

その後、影を削除します

text.setShadowLayer(0, 0, 0, 0);
text.setTextColor(R.drawable.buttonBabyBlue);

表示してアップロードする写真がありますが、スパムを恐れて表示できません。

4

2 に答える 2

9

textview.setShadowLayer(0,0,0,0)シャドウ レイヤーをクリアするために呼び出します。


クラスにはclearShadowLayer()メソッドがありますがPaint、内部的にsetShadowLayerはすべてゼロのパラメーターで呼び出します。それはあなたにはうまくいかないようです。

私が考えることができる唯一の他の方法は、onDrawメソッドをオーバーライドすることです。TextPaintシャドウ パラメータで設定されたオブジェクトを維持します。

@Override
void setShadowLayer(.....) {                  // do not call super
    paintWithShadowLayer.setShadowLayer(....); // the other with shadow layer set
}

@Override
void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    ...
    if (bToggleON) {
         canvas.drawText(text, index, count, x, y, paintWithShadowLayer);
    } else {
         canvas.drawText(text, index, count, x, y, getPaint());
    }
    ...
}
于 2012-09-30T17:02:03.800 に答える
1
textView.getPaint().clearShadowLayer();
textView.invalidate();

これは私にとってはうまくいきました。

于 2019-06-12T12:47:23.290 に答える