Использование списка слоев для отображения некоторых изображений, которые можно рисовать

Android-студия 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 и некоторые дешевые смарт-устройства, я получаю следующее: введите здесь описание изображения

Just quick summary.

Nexus 5 real device and AVD devices works ok
Genymotion and cheap smart devices doesn't display correctly

Я просто запутался в том, что я должен верить. Я также пытался использовать растровое изображение, чтобы увидеть, будет ли это иметь какое-либо значение.

Большое спасибо за любые предложения.


person ant2009    schedule 15.12.2015    source источник
comment
Привет, вы пытались использовать «px» вместо «dp» (android:width=68px)?   -  person Volodymyr Kulyk    schedule 26.12.2015


Ответы (2)


Обновите список слоев следующим образом.

<?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:height="68dp"
    android:left="-20dp"
    android:bottom="-20dp"
    android:width="68dp">
    <bitmap
        android:gravity="bottom|left"
        android:src="@drawable/peas" />
</item>

person SachinS    schedule 19.12.2015
comment
Спасибо, что это действительно сработало, теперь отображается на genymotion и других моих дешевых устройствах. Однако теперь, когда я использую растровые изображения xml, я не могу изменить размер изображения peas.png. Можно ли как-то изменить размер изображений? Спасибо. - person ant2009; 20.12.2015
comment
чтобы изменить размер изображения, вы должны поместить разные растровые рисунки для разных плотностей экрана (ldpi (низкая), mdpi (средняя), hdpi (высокая), xhdpi сверхвысокая), xxhdpi (экстра-экстра-высокая), и хххдпи) - person SachinS; 21.12.2015
comment
Да, я сделал это, и все отлично работает с различными доступными папками ldpi, mdpi и т. д. Просто быстрый вопрос. Я заметил, что если вы удалите атрибут гравитации из растрового изображения, масштабирование снова пойдет совершенно неправильно. Кажется, что вы не можете использовать растровое изображение без использования гравитации. Попробуйте удалить свою гравитацию из своего ответа, и вы поймете, что я имею в виду. Почему оно так себя ведет? - person ant2009; 21.12.2015
comment
android:gravity in ‹bitmap› указывает, где расположить рисуемый объект в его контейнере, если растровое изображение меньше контейнера. - person SachinS; 23.12.2015
comment
Проще говоря, гравитация в ‹bitmap› используется, чтобы избежать масштабирования. - person SachinS; 23.12.2015
comment
Отказ от ответственности: ширина и высота соответствуют стандарту API 23+. - person ozmank; 26.09.2018
comment
есть идеи, как использовать с app:srcCompat? - person Ilia Grabko; 01.08.2019

Поместите изображения во все папки плотности (xxhdpi, xhdpi, hdpi).

Система выбирает ресурсы изображения в зависимости от разрешения экрана.

person Akhil Jayakumar    schedule 21.12.2015