使用layer-list来展示一些可绘制图像。

43
Android Studio 2.0 预览版3b
你好,
我创建了以下布局,想用作我的应用程序的背景。我正在使用 layer-list 并希望在两个位置显示一碗豌豆。预览看起来一切正常,但当我在 genymotion 或一些廉价的中国设备上运行时,图像会拉伸到整个屏幕。然而,在 Android AVD 上,一切看起来都很好,在我的 Nexus 5(真实设备)上也一切正常。
这就是我想要的,以及它在 AVD 和 Nexus 5 上的显示方式。如您所见,没有问题。
<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>

我已将peas.png文件放置在drawable-nodpi中,并在layer-list中添加了宽度和高度。

当我在Genymotion和一些廉价的智能设备上运行时,我得到以下结果: enter image description here

Just quick summary.

Nexus 5 real device and AVD devices works ok
Genymotion and cheap smart devices doesn't display correctly
我很困惑应该相信什么,我也尝试使用位图来看是否有所不同。
非常感谢任何建议。

你好,你尝试使用'px'代替'dp'了吗(android:width="68px")? - Volodymyr Kulyk
2个回答

56

请按以下方式更新您的 layer-list

<?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>

谢谢,这实际上起作用了,现在能够在genymotion和我的其他便宜设备上显示。但是,现在我正在使用XML位图,我无法更改peas.png图像的大小。有没有办法可以改变图像的大小呢?谢谢。 - ant2009
3
要更改图像的尺寸,您需要为不同的屏幕密度(ldpi (低), mdpi (中), hdpi (高), xhdpi 额外高), xxhdpi (额外额外高) 和 xxxhdpi 使用不同的位图可绘制对象。 - SachinS
2
"<bitmap>中的android:gravity属性表示如果位图比容器小,将在其容器中放置可绘制对象的位置。" - SachinS
1
简单来说,在 <bitmap> 中使用重力是为了避免缩放。 - SachinS
3
免责声明:width和height是API 23+。 - ozmank
显示剩余2条评论

12

将图片放置在各个密度文件夹中(xxhdpi,xhdpi,hdpi)。

系统根据屏幕分辨率选择图像资源。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接