создание фона, который можно рисовать, используя список слоев, значок растягивается

Привет, я пытаюсь создать фон drawable для моего экрана-заставки, который я буду устанавливать в самой теме. Но растровое изображение, используемое для сохранения в центре, растягивается, и я не могу понять, как сохранить его нормальным. Ниже приведен мой код для рисования: splash_screen_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
        <gradient
            android:angle="360"
            android:centerColor="@color/colorAccentXDark"
            android:endColor="@color/Black"
            android:gradientRadius="500dp"
            android:startColor="@color/colorAccentXDark"
            android:type="radial"
            android:useLevel="false" />
    </shape>
</item>
<item
    android:bottom="50dp"
    android:top="50dp">
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:innerRadius="500dp"
        android:innerRadiusRatio="1"
        android:shape="oval">
        <gradient
            android:angle="360"
            android:centerColor="@color/colorAccentXDark"
            android:endColor="@color/colorAccentXDark"
            android:gradientRadius="400dp"
            android:startColor="@color/colorAccent"
            android:type="radial"
            android:useLevel="false" />
    </shape>
</item>
<item android:gravity="center">
    <bitmap android:src="@drawable/ty_logo" />
</item>
</layer-list>

Вот код, в котором я устанавливаю это рисование в качестве фона действия:

 <style name="TYTheme" parent="SearchActivityTheme.NoActionBar">
    <item name="colorPrimaryDark">@color/colorAccentXDark</item>
    <item name="android:alertDialogTheme">@style/AlertDialogTheme</item>
    <item name="android:windowBackground">@drawable/splash_screen_bg</item>
</style>

Итак, растровое изображение ty_logo — это png, которое растягивается в моем телефоне. Поскольку нет опции scaleType с bitmapDrawable, я не знаю, как с этим справиться.


person himanshu1496    schedule 21.03.2016    source источник
comment
Вы нашли ответ на этот вопрос? У меня такая же проблема сейчас и не могу найти решение.   -  person baal    schedule 04.08.2016
comment
решения еще не получил.   -  person himanshu1496    schedule 04.08.2016


Ответы (3)


Добавьте gravity к растровому изображению, установленному на center.

<item android:gravity="center">
    <bitmap android:src="@drawable/ty_logo" 
            android:gravity="center" />
</item>
person nt-complete    schedule 12.05.2016

Я надеюсь, что ty_logo имеет подходящие пиксели, и вы предоставили изображение с разными пикселями для разных экранов устройств (ldpi, mdpi, hdpi, xhdpi, etc). Если нет, просмотрите этот ответ на аналогичную проблему, с которой вы столкнулись: Измените размер изображений в растровых изображениях в xml

В противном случае это можно легко решить, если ваша целевая версия предназначена для API 23, поскольку <item> имеет ширину,высоту,gravity.

А если нет, то следующий код должен работать, используя атрибут gravity для растрового изображения. Опять же, это исходит из предположения, что ваш логотип имеет не больше пикселей, чем разрешение устройств.

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
...

<item>
      <bitmap android:src="@drawable/ty_logo"
        android:gravity="center" />
</item>

...
</layer-list>
person Kaushik NP    schedule 11.02.2017

Вы можете обернуть растровое изображение внутри ScaleDrawable <scale> и использовать ScaleDrawable внутри LayerListDrawable.

<item android:gravity="center">
    <scale android:drawable="@drawable/ty_logo"
         android:scaleHeight="80%"
         android:scaleWidth="80%" >
    </scale> 
</item>
person Zamrony P. Juhara    schedule 21.03.2016
comment
Я пытался добавить этот, но теперь ty_logo даже не виден. - person himanshu1496; 21.03.2016