当Radius设置为0时,Android TextView阴影不起作用

时间:2015-10-17 08:39:41

标签: android textview shadow

我需要在标题上绘制阴影,没有任何模糊,如下图所示: text with shadow, shadowRadius = 0

我的问题是,只要我将shadowRadius设置为0,阴影就不再出现了。

这是我正在使用的代码,在我的style.xml中

<style name="navigationTitleWithShadow">
    <item name="android:textAllCaps">true</item>
    <item name="android:textColor">@color/navigationTitleForegroundColor</item>
    <item name="android:shadowColor">@color/navigationTitleShadowColor</item>
    <item name="android:shadowDx">1</item>
    <item name="android:shadowDy">1</item>
    <item name="android:shadowRadius">0</item>
</style>

在布局中:

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingTop="@dimen/nav_header_vertical_spacing"

    android:text="@string/menuTableViewController_navigationTitle"
    android:textAppearance="@style/navigationTitleWithShadow" />

知道怎么设置这个0 shadowRadius?

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案,继承TextView,重写方法onDraw()。这是我的代码:

@Override
protected void onDraw(Canvas canvas) {
    //super.onDraw(canvas);

    if ( getShadowColor() != 0 && getShadowRadius() == 0 ) {

        Paint paint = this.getPaint();
        paint.setColor(getShadowColor());

        paint.setTextAlign(Paint.Align.CENTER);

        int xPos = (canvas.getWidth() / 2);
        int yPos = (int) ((canvas.getHeight() / 2) - ((paint.descent() +
                paint.ascent()) / 2));

        // Draw the shadow text first, so it appears below
        canvas.drawText(getText().toString().toUpperCase(), xPos + getShadowDx(), yPos + getShadowDy(), paint);

        paint.setColor(getCurrentTextColor());

        // Draw the main text on top of it
        canvas.drawText(getText().toString().toUpperCase(), xPos, yPos, paint);

    } else {
        super.onDraw(canvas);
    }

}

效果很好,虽然我不确定为什么我需要setTextAlign,但如果没有它,我的文字就会放错位置,在右边。