14

嗨,我正在尝试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_logopng我的手机中被拉伸了。由于没有scaleType选择,bitmapDrawable我不知道如何处理它。

4

3 回答 3

8

添加gravity到您的位图设置为center.

<item android:gravity="center">
    <bitmap android:src="@drawable/ty_logo" 
            android:gravity="center" />
</item>
于 2016-05-12T21:15:58.997 回答
4

希望ty_logo具有合适的像素,并且您为各种设备屏幕提供了不同的像素图像 ( ldpi, mdpi, hdpi, xhdpi, etc)。如果没有,请通过这个答案来解决您发现自己遇到的类似问题: Resize images in bitmap in xml

否则,如果您的目标版本是为API 23提供<item>宽度高度、重力属性,则可以轻松解决此问题。

如果没有,下面的代码应该可以工作,使用位图的重力属性。同样,这是假设您的徽标没有比设备分辨率更多的像素。

<?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>
于 2017-02-11T18:41:44.320 回答
2

您可以将位图包装在ScaleDrawable <scale>内部并ScaleDrawable在内部使用LayerListDrawable

<item android:gravity="center">
    <scale android:drawable="@drawable/ty_logo"
         android:scaleHeight="80%"
         android:scaleWidth="80%" >
    </scale> 
</item>
于 2016-03-21T06:36:58.960 回答