2012-06-27 33 views
19

Estoy tratando de hacer un marco de código para que pueda aplicarlo para hacer esquinas interiores redondeadas con un relleno sólido exterior y transparente en el interior. Al igual que un rectángulo sólido con interior ovalado transparente. imagen adjunta. He probado algunas combinaciones de formas, todo lo que está disponible en línea muestra las esquinas en el exterior.Esquinas interiores redondeadas con marco interior transparente

enter image description here

El interior debe ser no transparente blanco. La imagen está tomada de este post pero la solución que aquí se presenta no es lo que estoy buscando. No quiero utilizar un parche de 9 paneles, pero me gustaría crearlo en código.

Solo son válidas las respuestas.

Respuesta

20

En primer lugar, crear 3 xmllayout en la carpeta dibujable:

  1. Primero: frame.xml
  2. Segundo: frame_build.xml
  3. Tercero: red.xml

(Puedes cambiar ge este nombre como desee),

frame.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:bottom="20dp" android:drawable="@drawable/red" android:top="-25dp" /> 
    <item android:bottom="15dp" android:drawable="@drawable/frame_build" android:top="5dp" android:left="-5dp" android:right="-5dp" /> 
</layer-list> 

frame_build.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 
    <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" /> 
    <corners android:radius="40dp" /> 
</shape> 

red.xml

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 
    <stroke android:width="40dp" android:height="40dp" android:color="#B22222" /> 
    <padding android:left="8dp" android:top="-1dp" android:right="8dp" android:bottom="9dp" /> 
    <corners android:radius="-10dp" /> 
</shape> 

Por último se refiere la vista o el diseño de trama XML de la siguiente manera:

android:background="@drawable/frame" 

Esta prueba y la salida de la siguiente imagen:

Output image

Esperanza esta ayuda.

+0

parece que lo que acabo necesito, voy a tratar de luego lo marcaré como respuesta – user606669

+0

@ user606669 contento de ayudarte –

+0

Lo he intentado pero es un fondo negro, no es transparente, estoy haciendo algo mal. Lo estoy usando en un framelayout y debería mostrar los marcos debajo de él. – user606669

38

cree el siguiente rounded_corner.xml:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:bottom="-10dp" 
     android:left="-10dp" 
     android:right="-10dp" 
     android:top="-10dp"> 
     <shape android:shape="rectangle"> 
      <stroke 
       android:width="10dp" 
       android:color="#ffffff" /> 
      <corners android:radius="20dp" /> 
     </shape> 
    </item> 
</layer-list> 

añadir esta por debajo de su imageView, que desea aplicar el marco en que:

<View 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_alignBottom="@+id/my_image_view" 
    android:layout_alignLeft="@id/my_image_view" 
    android:layout_alignRight="@+id/my_image_view" 
    android:layout_alignTop="@id/my_image_view" 
    android:background="@drawable/rounded_corner" /> 
+1

esta es la mejor respuesta. ¡Gracias! – joseph

+0

Funciona muy bien, pero no entiendo por qué, ¿puedes explicarlo por favor? – Chol

+0

Dibuja un "trazo ovalado" más grande en el rectángulo que cubre las esquinas del rectángulo. –