Using layer-list to display some drawable images
Solution 1
Update your layer-list as follows
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<gradient
android:centerX="0.5"
android:centerY="0.1"
android:endColor="#08e25b"
android:gradientRadius="300dp"
android:startColor="#b7e9c9"
android:type="radial" />
</shape>
</item>
<item
android:width="48dp"
android:height="48dp"
android:bottom="68dp"
android:right="-20dp">
<bitmap
android:gravity="bottom|right"
android:src="@drawable/peas" />
</item>
<item
android:width="68dp"
android:height="68dp"
android:bottom="-20dp"
android:left="-20dp">
<bitmap
android:gravity="bottom|left"
android:src="@drawable/peas" />
</item>
</layer-list>
Solution 2
Place your images in all density folders (xxhdpi, xhdpi, hdpi).
The system picks image resources based on screen resolution.
ant2009
Updated on August 22, 2020Comments
-
ant2009 over 3 years
Android studio 2.0 Preview 3b
Hello,
I have created the following layout that I want to use for a background for my app. I am using the
layer-list
and I want to display a bowl of peas in 2 locations. Everything looks ok in the preview, but when I run on genymotion or some cheap Chinese devices the image stretches across the screen. However, on the Android AVD, everything looks fine and on my Nexus 5 (real device) everything works ok.This is what I want and this is how it's displayed in the AVD and Nexus 5. As you can see there is no problem.
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape> <gradient android:centerX="0.5" android:centerY="0.3" android:endColor="#08e25b" android:gradientRadius="300dp" android:startColor="#b7e9c9" android:type="radial" /> </shape> </item> <item android:width="48dp" android:height="48dp" android:left="350dp" android:top="400dp"> <bitmap android:src="@drawable/peas" /> </item> <item android:width="68dp" android:height="68dp" android:drawable="@drawable/peas" android:left="-20dp" android:top="480dp" /> </layer-list>
I have placed
peas.png
file indrawable-nodpi
and just add the width and height in thelayer-list
And when I run on the genymotion and some cheap smart devices I get the following:
Just quick summary. Nexus 5 real device and AVD devices works ok Genymotion and cheap smart devices doesn't display correctly
I am just confused in what I should believe. I have tried to use the bitmap as well to see if that would make any difference.
Many thanks for any suggestions.
-
ant2009 over 8 yearsThanks that actually worked now now that do display on the genymotion and my other cheap devices. However, now that I am using xml bitmaps I cannot change the size of the peas.png image. Is there anyway I can change the size of the images? Thanks.
-
SachinS over 8 yearsto change the size of the image,you have to put different bitmap drawables for different screen densities(ldpi (low), mdpi (medium), hdpi (high), xhdpi extra-high), xxhdpi (extra-extra-high), and xxxhdpi)
-
ant2009 over 8 yearsYes, I have done that and everything works fine with the different drawable folders ldpi, mdpi, etc. Just a quick question. I have noticed if you remove the gravity attribute from the bitmap the scaling goes completely wrong again. It seems that you can't use the bitmap without using the gravity. Try removing your gravity from you answer and you will see what I mean. Why does it behave like this?
-
SachinS over 8 years"android:gravity" in <bitmap> indicates where to position the drawable in its container if the bitmap is smaller than the container.
-
SachinS over 8 yearsSimply,gravity in <bitmap> is used to avoid scaling.
-
ozmank over 5 yearsDisclaimer: width and height are API 23+
-
Ilia Grabko almost 5 yearsany idea how to use with app:srcCompat ?