2015-10-17 2 views
1

мне нужно нарисовать тень на название, без размытости, как на этой картинке: text with shadow, shadowRadius = 0Android TextView тень не работает, когда Radius значение 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?

+0

Я не уверен, но, прочитав документацию, я увидел, что андроид: shadowRadius должен быть значением с плавающей запятой. Я не знаю, можно ли поставить значение 0. Возможно, попробуйте 0.0 – Mtoypc

+0

Спасибо! Я пробовал с 0.0, 0.1, 0.5 и до тех пор, пока мое значение меньше 1, тени нет. –

ответ

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, но без него мой текст неуместна, справа.