2012-09-30 71 views
1

我有一个Android程序与一堆文本视图。最初,所有这些观点都没有影子。Android如何删除文字阴影?

当我按下特定的切换按钮时,我想让这些textViews脱颖而出。

理想情况下,我想为它们添加文字阴影发光效果。这个我 成功没有问题做了与textView.setShadowLayer(半径,DX,DY,颜色)

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

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

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

主要目标是使用切换按钮打开/关闭特定文本视图的文本高亮显示和除了使用阴影之外,我愿意接受其他方法。理想情况下,我想使用阴影,但任何其他想法突出显示文字都很好。

我使用这种风格的TextView的布局XML

<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> 

;

(这部分是我textLayer.setShadow(0,0,0,0),得到的回答后追加当我按下,这使得该按钮的视图有阴影

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); 

就是讨厌我有图片展示,并上载他们,但他们 不让我告诉他们,怕垃圾邮件

回答

6

呼叫textview.setShadowLayer(0,0,0,0)的清除阴影层。


有一个在PaintclearShadowLayer()方法,但在内部太调用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()); 
    } 
    ... 
} 
+0

这并不工作,影子被删除,但文本视图现在是一个较暗的颜色比原来的表现.. – phriendtj

+0

感谢您的答案,但我想我将不得不找一些其他突出显示这些文本视图的方式。我有两个其他的想法,1.将背景改为别的,然后回来,2。使用FrameLayout,将相同事物的一些低alpha文本视图放在现有的视图上,然后以某种方式删除它们,第一种方法可能看起来不太好,第二种方法可能很难在各种屏幕尺寸上工作,并且会因为额外视图的数量的压力性能 – phriendtj

+0

我必须澄清,我不知道为实际颜色资源vs可绘制资源设置文本颜色是非常不同的事实,我认为可绘制wsa只是一个颜色与alpha值,但情况并非如此... setShadowLayer(0,0,0,0)在正确使用颜色/绘图时确实有效 – phriendtj