2012-06-27 15 views
19

Sto provando a realizzare una cornice dal codice in modo da poterla applicare per rendere gli angoli interni arrotondati con un riempimento solido all'esterno e trasparente all'interno. Proprio come un solido rettangolo con ovale trasparente all'interno. immagine allegata. Ho provato poche combinazioni di forme che tutte quelle disponibili online mostrano gli angoli esterni.Angoli interni arrotondati con cornice interna trasparente

enter image description here

L'interno non deve essere trasparente. L'immagine è presa da questo post ma la soluzione presentata qui non è quella che sto cercando. Non voglio usare un 9 drawable di patch ma vorrei essere creato nel codice.

Solo risposte valide.

risposta

20

Prima di tutto, creare 3 xmllayout nella cartella drawable:

  1. Primo: frame.xml
  2. Secondo: frame_build.xml
  3. Terzo: red.xml

(È possibile cambiare ge questo nome come si desidera),

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> 

riferisce infine la visualizzazione o il layout al fotogramma XML come segue:

android:background="@drawable/frame" 

Questa testata e di uscita, come di seguito immagine:

Output image

Spero che questo aiuto.

+0

Sembra come quello che ho solo bisogno, mi permetta di provare quindi lo contrassegnerò come risposta – user606669

+0

@ user606669 felice di aiutarti –

+0

Ho provato ma è uno sfondo nero non trasparente sto facendo qualcosa di sbagliato. Lo sto usando in un framelayout e dovrebbe mostrare i frame sotto di esso. – user606669

38

creare la seguente 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> 

aggiungere questo sotto l'ImageView, che si desidera applicare la cornice su di esso:

<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

questa è la migliore risposta. Grazie! – joseph

+0

Funziona alla grande, ma non capisco perché, puoi spiegare per favore? – Chol

+0

Sta disegnando un "tratto ovale" più grande sul rettangolo che copre gli angoli del rettangolo. –