2010-10-18 4 views
5

Si dibujo una forma recta redonda por código, puedo usar setShadowLayer para obtener una sombra dibujada para la forma. ¿Hay un equivalente al definir formas en XML?¿Existe un equivalente a setShadowLayer al definir formas en XML en Android?

El siguiente ejemplo dibuja un fondo recto redondo a una forma. ¿Qué debería agregar para agregar una sombra a la forma? ¿Es posible usar XML?

shape_test.xml

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid android:color="#8067BF6A"/>  
    <stroke android:width="3dp" android:color="#80000000" /> 
    <padding android:left="1dp" 
     android:top="1dp" 
     android:right="1dp" 
     android:bottom="1dp" /> 
    <corners android:bottomRightRadius="7dp" 
     android:bottomLeftRadius="7dp" 
     android:topLeftRadius="7dp" 
     android:topRightRadius="7dp"/> 
</shape> 

main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:padding="10dp" 
android:background="#ffdddddd" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<Button android:background="@drawable/shape_test" 
android:padding="5dp" 
android:textStyle="bold" 
android:textSize="28sp" 
android:text="Hello" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" /> 
</LinearLayout> 

Respuesta

5

uso de XML, no hay forma real de hacer esto, que yo sepa. He visto algunas sugerencias de hacer una segunda caja con la misma forma detrás del artículo, y simplemente llenarlo de negro, pero no creo que sea una buena solución. He estado tratando de encontrar una manera de hacer esto yo mismo por un tiempo.

Si ayuda, here's a link a una pregunta similar que publiqué, junto con algún código. Lo conseguí trabajando para algunas imágenes, pero todavía parece tener problemas para encontrar el canal alfa a veces. Básicamente, hemos anulado ImageView y poner esto en el método onDraw():

@Override 
protected void onDraw(Canvas canvas) 
{ 
    Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.omen); 
    Paint paint = new Paint(); 
    paint.setAntiAlias(true); 
    paint.setShadowLayer(5.5f, 6.0f, 6.0f, Color.BLACK); 
    canvas.drawColor(Color.GRAY); 
    canvas.drawRect(50, 50, 50 + bmp.getWidth(), 50 + bmp.getHeight(), paint); 
    canvas.drawBitmap(bmp, 50, 50, null);   
} 

que se acaba poniendo a prueba, sin embargo, por lo que, obviamente, una gran cantidad de los parámetros tendría que ser más genérico. Sin embargo, no he tenido mucho tiempo para trabajar en ello últimamente, pero tal vez esto lo ayude a encontrar su respuesta.

Cuestiones relacionadas