Layerlist drawable doesn't stretch nicely - android

I'm starting to learn android layer list and working with drawables.
I'm trying to create a simple line with a circle at each end:
I came up with a layerlist as shown below. It works good but the problem is when I run it on various screen sizes the circles either separate from the line or the get pushed in and fall in on the line.
I want the shape to resize as is and not get deformed on different screen sizes. I'm not sure what I'm missing.
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:left="300dp" android:gravity="center_horizontal|left">
<shape android:shape="ring"
android:innerRadiusRatio="700"
android:thickness="5dp"
android:useLevel="false">
<solid android:color="#fff" />
</shape>
</item>
<item
android:bottom="13dp"
android:right="53dp"
android:left="53dp"
android:top="13dp">
<shape android:shape="line">
<solid android:color="#fff" />
<stroke
android:width="2dp"
android:color="#fff" />
</shape>
</item>
<item
android:right="300dp" android:gravity="center_horizontal|right">
<shape
android:shape="ring"
android:innerRadiusRatio="700"
android:thickness="5dp"
android:useLevel="false">
<solid android:color="#fff" />
</shape>
</item>
</layer-list>

Try this
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:gravity="center"
android:left="5dp">
<shape android:shape="line">
<solid android:color="#ec0b0b" />
<stroke
android:width="2dp"
android:color="#054b89" />
</shape>
</item>
<item
android:drawable="#drawable/ic_online"
android:gravity="left"
android:right="50dp" />
<item
android:drawable="#drawable/ic_online"
android:gravity="right" />
</layer-list>
android:drawable="#drawable/ic_online"
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="10dp"
android:height="10dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#05b714"
android:pathData="M12,12m-10,0a10,10 0,1 1,20 0a10,10 0,1 1,-20 0"/>
</vector>
OUTPUT

Related

Using a layer-list with multiple circular items

I am trying to make a shape that looks roughly like
I understand that I need a layer-list with 3 items stacked on top of each other with two of them being offset from their top-left and bottom-right. Here is my code for this
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:right="8dp" android:bottom="8dp">
<shape android:shape="oval">
<solid android:color="#color/color_white" />
</shape>
</item>
<item android:top="8dp" android:left="8dp">
<shape android:shape="oval">
<solid android:color="#color/color_gray" />
</shape>
</item>
<item>
<shape android:shape="oval">
<solid android:color="#color/color_circle" />
</shape>
</item>
</layer-list>
But I am not getting the correct output. More specifically, the white and black shapes are smaller in size than the middle one as you can see here
I don't know why this is happening. Can anyone please help me out? Thanks
Try specifying the width and height for each shape:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:right="8dp" android:bottom="8dp">
<shape android:shape="oval">
<solid android:color="#android:color/white" />
<size android:width="50dp" android:height="50dp" />
</shape>
</item>
<item android:top="8dp" android:left="8dp">
<shape android:shape="oval">
<solid android:color="#android:color/black" />
<size android:width="50dp" android:height="50dp" />
</shape>
</item>
<item>
<shape android:shape="oval">
<solid android:color="#android:color/darker_gray" />
<size android:width="50dp" android:height="50dp" />
</shape>
</item>
</layer-list>
This gives me the following image:

Android Shape: Circle with tick mark

I am trying to get a circle with a tick mark in the middle using a shape drawable.
This is what I would like:
Could you please suggest me how to approach it?
Try this:
<vector android:height="45dp"
android:viewportHeight="45" android:viewportWidth="45"
android:width="45dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#F2F2F2" android:fillType="evenOdd"
android:pathData="M22.5,22.5m-22.5,0a22.5,22.5 0,1 1,45 0a22.5,22.5 0,1 1,-45 0"
android:strokeColor="#00000000" android:strokeWidth="1"/>
<path android:fillColor="#F7286F" android:fillType="nonZero"
android:pathData="M21.7692,31.1334C20.5904,32.2889 18.6777,32.2889 17.4994,31.1334L10.8841,24.6492C9.7053,23.4943 9.7053,21.6195 10.8841,20.4646C12.0623,19.3092 13.975,19.3092 15.1538,20.4646L19.0952,24.3274C19.3928,24.6185 19.8758,24.6185 20.1739,24.3274L30.8462,13.8666C32.0244,12.7111 33.9371,12.7111 35.1159,13.8666C35.682,14.4214 36,15.1742 36,15.9589C36,16.7435 35.682,17.4963 35.1159,18.0511L21.7692,31.1334Z"
android:strokeColor="#00000000" android:strokeWidth="1"/>
That drawable is like below:
you can try this
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<size
android:width="32dp"
android:height="32dp" />
<solid android:color="#fff" />
</shape>
</item>
<item
android:width="18dp"
android:height="4dp"
android:gravity="center"
android:right="18dp"
android:top="15dp">
<rotate android:fromDegrees="40">
<shape android:shape="rectangle">
<gradient
android:angle="-180"
android:endColor="#FF0066"
android:startColor="#D6006C" />
</shape>
</rotate>
</item>
<item
android:width="64dp"
android:height="64dp">
<shape android:shape="rectangle">
<solid android:color="#android:color/transparent" />
</shape>
</item>
<item
android:width="32dp"
android:height="4dp"
android:gravity="center"
android:left="12dp"
android:top="4dp">
<rotate android:fromDegrees="-50">
<shape android:shape="rectangle">
<gradient
android:angle="-90"
android:endColor="#FF0066"
android:startColor="#D6006C" />
</shape>
</rotate>
</item>
</layer-list>
This code should work :
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:ignore="UnusedResources">
<item>
<shape android:shape="oval">
<solid android:color="#android:color/black"/> //enter the color you want
<size
android:width="64dp"
android:height="64dp"/>
</shape>
</item>
<item>
<bitmap android:src="#drawable/ic_check_white_36dp"
android:gravity="center"/>
</item>
Try to go with a vector Drawable. If you have two or more different drawables you can make a layer out of them.
However the following code would do the work.
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<solid android:color="#fff"/>
<size
android:width="30dp"
android:height="30dp"/>
</shape>
</item>
<item
android:width="18dp"
android:height="3dp"
android:top="15dp"
android:right="17dp"
android:gravity="center">
<rotate
android:fromDegrees="40">
<shape android:shape="rectangle">
<solid android:color="#D6006C"/>
</shape>
</rotate>
</item>
<item
android:width="30dp"
android:height="3dp"
android:left="12dp"
android:top="4dp"
android:gravity="center"
>
<rotate
android:fromDegrees="-50">
<shape android:shape="rectangle">
<solid android:color="#D6006C"/>
</shape>
</rotate>
</item>
<item
android:width="60dp"
android:height="60dp">
<shape android:shape="rectangle">
<solid android:color="#android:color/transparent"/>
</shape>
</item>
</layer-list>
This will create a tick with a gradient tick mark.
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<solid android:color="#fff"/>
<size
android:width="30dp"
android:height="30dp"/>
</shape>
</item>
<item
android:width="18dp"
android:height="3dp"
android:top="15dp"
android:right="17dp"
android:gravity="center">
<rotate
android:fromDegrees="40">
<shape android:shape="rectangle">
<solid android:color="#D6006C"/>
</shape>
</rotate>
</item>
<item
android:width="30dp"
android:height="3dp"
android:left="12dp"
android:top="4dp"
android:gravity="center"
>
<rotate
android:fromDegrees="-50">
<shape android:shape="rectangle">
<gradient android:startColor="#D6006C"
android:endColor="#491F2B"/>
</shape>
</rotate>
</item>
<item
android:width="60dp"
android:height="60dp">
<shape android:shape="rectangle">
<solid android:color="#android:color/transparent"/>
</shape>
</item>
</layer-list>
First create a vector with tick icon with gradient "ic_tick_vector" Requires api lvl 21 or above
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"
android:strokeColor="?android:attr/colorAccent"
android:strokeWidth="0">
<aapt:attr name="android:fillColor">
<gradient
android:endX="10"
android:endY="20"
android:startX="1"
android:startY="20"
android:type="linear">
<item
android:color="?android:attr/colorAccent"
android:offset="0.0" />
<item
android:color="?android:attr/colorPrimaryDark"
android:offset="1.0" />
</gradient>
</aapt:attr>
</path>
<path android:strokeWidth="0.1"
android:strokeColor="#color/colorAccent"
android:pathData="M0,80 H100" />
</vector>
then create a drawable with circle background "round_background"
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:shape="oval">
<stroke android:color="#557C7373" android:width="10dp"/>
<solid android:color="#color/lightBlue"/>
<size android:width="150dp" android:height="150dp"/>
</shape>
</item>
<item>
<shape android:shape="oval">
<solid android:color="#color/white"/>
<size android:width="100dp" android:height="100dp"/>
</shape>
</item>
</selector>
Use this in your imageview now u will have rounded background with tick item at center (gradient)
<ImageView
android:background="#drawable/round_background"
android:layout_gravity="center"
android:src="#drawable/ic_tick_vector" />

Draw Line With Starting Circle

I am Using Drawable For Draw Horizontal Line With Starting Small Circle In android But The Circle Comes With Center Of the Horizontal Line.
This is my code.
android->res->drawable Folder.
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:gravity="start">
<shape
android:innerRadius="0dp"
android:shape="ring"
android:thickness="6dp"
android:useLevel="false">
<solid android:color="#color/colorPrimary"/>
</shape>
</item>
<item >
<shape
android:shape="line">
<size
android:width="200dp"
android:height="200dp" />
<stroke
android:width="2dp"
android:color="#0000FF" />
</shape>
</item>
Please Help me to solve this....
I think this will solve your problem.
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item >
<shape
android:shape="line">
<size
android:width="200dp"
android:height="200dp" />
<stroke
android:width="2dp"
android:color="#0000FF" />
</shape>
</item>
<item android:gravity="start" android:left="-188dp">
<shape
android:innerRadius="0dp"
android:shape="ring"
android:thickness="6dp"
android:useLevel="false">
<solid android:color="#color/colorPrimary"/>
</shape>
</item>
</layer-list>
Also, to place this drawable in imageview then follow this code.
<ImageView
android:scaleType="fitXY"
android:src="#drawable/test"
android:layout_width="200dp"
android:layout_height="15dp" />

Android Studio XML Drawable Selector Not Displaying An Item

I'm having an issue with my custom checkbox in that the selector does not show the white rounded rectangle with a yellow stroke when unchecked?
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true">
<layer-list>
<item>
<shape android:shape="rectangle">
<solid android:color="#ffffff" />
<stroke android:width="4px" android:color="#color/colourAccent" />
<size android:width="36dp" android:height="36dp" />
<corners android:radius="2dp" />
</shape>
</item>
<item>
<vector
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#color/colourAccent"
android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"/>
</vector>
</item>
</layer-list>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="#ffffff" />
<stroke android:width="4px" android:color="#color/colourAccent" />
<corners android:radius="2dp" />
<size android:width="36dp" android:height="36dp" />
</shape>
</item>
</selector>
For the life of me I am unable to figure out the issue nor discover the fix

xml drawable not being drawn properly in android

I want a non-veg icon to drawn using drawable xml resource in android. I'm using Android Studio 1.1.0
The preview is being shown perfectly in my android studio. but it's not beind displayed correctly in my devices. Please help me.
Here is what I want
Here is what I'm getting
Android 5.0.0
Android 4.4.4
Android 4.3
Here is by xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape
android:shape="rectangle"
android:thickness="2dp">
<size
android:width="24dp"
android:height="24dp" />
<stroke
android:width="2dip"
android:color="#android:color/holo_red_dark" />
<corners
android:bottomLeftRadius="2dp"
android:bottomRightRadius="2dp"
android:topLeftRadius="2dp"
android:topRightRadius="2dp" />
</shape>
</item>
<item>
<shape android:shape="ring" android:thicknessRatio="-1">
<padding
android:bottom="15dp"
android:left="15dp"
android:right="15dp"
android:top="15dp" />
<size
android:width="4dp"
android:height="4dp" />
<solid android:color="#android:color/holo_red_dark" />
</shape>
</item>
</layer-list>
Use an oval for your second item, not a ring. Don't bother specifying size or padding on the second item, it's going to be scaled to the size of the first item anyway, use offsets on the item tag instead. Don't specify thickness on the rectangle, it does nothing as it is a ring-only attribute.
The modified xml below gives roughly the shape you're looking for. Adjust the dimensions to fine tune the appearance.
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape android:shape="rectangle" >
<size
android:height="24dp"
android:width="24dp" />
<stroke
android:width="2dp"
android:color="#android:color/holo_red_dark" />
<corners
android:bottomLeftRadius="2dp"
android:bottomRightRadius="2dp"
android:topLeftRadius="2dp"
android:topRightRadius="2dp" />
</shape>
</item>
<item
android:bottom="4dp"
android:left="4dp"
android:right="4dp"
android:top="4dp">
<shape android:shape="oval" >
<solid android:color="#android:color/holo_red_dark" />
</shape>
</item>
</layer-list>

Categories

Resources