Android 如何去除文字阴影?
Posted
技术标签:
【中文标题】Android 如何去除文字阴影?【英文标题】:Android How to Remove Text Shadow? 【发布时间】:2012-09-21 16:39:56 【问题描述】:我有一个带有一堆文本视图的 android 程序。最初,所有这些视图都没有阴影。
当我按下特定的切换按钮时,我希望这些 textViews 脱颖而出。
理想情况下,我想为它们添加文本阴影发光效果。这个我有 textView.setShadowLayer(radius, dx, dy, color) 没有问题就成功完成
问题是,如果我再次按下相同的切换按钮(这会使阴影出现), 我需要移除阴影,以便不再突出显示文本。
我尝试将阴影层设置为半径 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);
这很烦人,我有图片要展示并上传,但是 他们不会让我给他们看,因为害怕垃圾邮件
【问题讨论】:
【参考方案1】:调用textview.setShadowLayer(0,0,0,0)
清除阴影层。
在Paint
类中有一个clearShadowLayer()
方法,但在内部它也调用带有所有零参数的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. 将背景更改为其他内容并返回,以及 2. 使用 FrameLayout,在现有视图上放置一些相同事物的低 alpha 文本视图,然后以某种方式删除它们,第一种方法可能不会看起来很好,第二个可能很难在各种屏幕尺寸上工作,并且会因为额外的视图数量而强调性能 我必须澄清一下,我不知道将文本颜色设置为实际颜色资源与可绘制资源有很大不同,我认为可绘制 wsa 只是具有 alpha 值的颜色,但事实并非如此...... setShadowLayer(0,0,0,0) 在正确使用颜色/drawables 时确实有效【参考方案2】:textView.getPaint().clearShadowLayer();
textView.invalidate();
这对我有用。
【讨论】:
以上是关于Android 如何去除文字阴影?的主要内容,如果未能解决你的问题,请参考以下文章