Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rounded Inner corners with transparent inside frame

Tags:

android

I am trying to make a frame from code so that I can apply it to make rounded inner corners with a solid fill outside and transparent inside. Just like a solid rectangle with transparent oval inside. picture attached. I have tried few shape combinations all that available online displays the corners outside.

enter image description here

The inside should be transparent not white. The image is taken from this post but the solution presented here is not what I am looking for I dont want to use a 9 patch drawable but would like to be created in code.

Please valid answers only.

like image 257
user606669 Avatar asked Jun 27 '12 10:06

user606669


People also ask

What tool would you use to round off the corners of an object?

In Inkscape, rounding the corners of a rectangle is easy - you select the object, press F4 (rectangle tool), and drag the circular nodes.


3 Answers

create the following 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> 

add this below your imageView, which you want to apply the frame on it:

<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" /> 
like image 147
Nima K Avatar answered Sep 24 '22 00:09

Nima K


First of all, create 3 xml layout in drawable folder:

  1. First: frame.xml
  2. Second: frame_build.xml
  3. Third: red.xml

(You can change this name as you wish),

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> 

Finally refer your view or layout to Frame XML as follow :

  android:background="@drawable/frame" 

This tested and output as below image:

Output image

Hope this help .

like image 28
Android Stack Avatar answered Sep 21 '22 00:09

Android Stack


tweaking @Nima K solution, to avoid using an extra View

create frame.xml @ drawable

<?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="20dp"
                android:color="@color/frame_color" />
            <corners android:radius="30dp" />
        </shape>
    </item>

    <item>
        <shape android:shape="rectangle">
            <solid android:color="@android:color/transparent" />

            <stroke
                android:width="20dp"
                android:color="@color/frame_color" />

            <corners android:radius="40dp" />
        </shape>

    </item>

</layer-list>

Then use it with 'android:background' attribute of your view

<TextView
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/frame" />

And this is the result

enter image description here

like image 22
Zain Avatar answered Sep 22 '22 00:09

Zain