Android如何删除文字阴影?

时间:2012-09-30 16:38:55

标签: android android-widget textview

我有一个带有大量文本视图的android程序。最初,所有这些观点都没有影子。

当我按下特定的切换按钮时,我希望这些textViews能够脱颖而出。

理想情况下,我想为它们添加文字阴影发光效果。我有 成功完成textView.setShadowLayer(半径,dx,dy,颜色)没有问题

问题是,如果我再次按下相同的切换按钮(这会使阴影出现), 我需要删除阴影,以便不再突出显示文本。

我尝试将阴影图层设置为半径0和透明颜色#00FFFFFF,#00000000和颜色#FFFFFFFF,#FF000000。但是,这些都没有将textView设置回来 它出现的原始方式。

有关如何移除阴影的任何想法。 (我真的不需要删除它,我只希望文本的显示方式与添加之前相同)

主要目标是使用切换按钮打开/关闭特定textViews的文本突出显示,并且我可以使用除使用阴影之外的其他方法。理想情况下,我想使用阴影,但突出文本的任何其他想法都很好。

(这部分是在我收到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);

这很烦人我有图片显示和上传但是 他们不会因为害怕垃圾邮件而让我出示

2 个答案:

答案 0 :(得分:6)

调用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());
    }
    ...
}

答案 1 :(得分:-1)

public void Insert(List<BsonDocument> list)
    {
        try
        {
            var collection = this.db.GetCollection<BsonDocument>(COLLECTION_NAME);
            collection.InsertMany(list);
        } catch (MongoBulkWriteException ex)
        {
            int index = ex.WriteErrors[0].Index;
            Insert(list.GetRange(index, list.Count - index));
        }

    }

这对我有用。