首页 > 解决方案 > 为什么 xml drawable 在 Android Studio 中看起来与手机不同?

问题描述

我正在尝试制作一个看起来像蛇的圆形进度条。在我的手机中,它看起来和我想要的完全一样:

在此处输入图像描述

然而,Android Studio 展示了一些非常不同的东西:

在此处输入图像描述

也就是蛇的“头”被拉长了,偏离了中心……恐怕Android会在不同的手机中显示不同的drawable。如何解决这个问题?

这是progress_gradient.xml我放入的可绘制对象res > drawables(我在手机中多次尝试和错误后得出了这个结论):

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toDegrees="720">

    <layer-list>
        <item>
            <shape
                android:innerRadiusRatio="3"
                android:shape="ring"
                android:thicknessRatio="30"
                android:useLevel="false">

                <size
                    android:width="100sp"
                    android:height="100sp" />

                <gradient
                    android:angle="0"
                    android:endColor="#9ac14e"
                    android:startColor="@android:color/transparent"
                    android:type="sweep"
                    android:useLevel="false" />

            </shape>
        </item>
        <item
            android:left="82sp"
            android:right="16dp"
            android:top="47sp"
            android:bottom="45sp"
            >

            <shape
                android:shape="oval" >
                <solid android:color="#9ac14e"/>

            <size
                    android:width="1sp"
                    android:height="5sp" />

            </shape>
        </item>
    </layer-list>

</rotate>

这就是我在布局中加载它的方式:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"

android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:orientation="vertical">

...

<ProgressBar
    android:id="@+id/waitcircle"
    android:layout_width="100sp"
    android:layout_height="100sp"
    android:layout_marginTop="50dp"
    android:layout_gravity="center_horizontal"
    android:indeterminate="true"
    android:indeterminateDrawable="@drawable/progress_gradient"/>

</LinearLayout>

标签: androidrenderingdrawable

解决方案


看起来“头”被尾巴透支了。丢失的块与绘制尾巴的区域相匹配。如果头是先画的,尾巴是画在上面的,没有透明度,这就是我希望看到的。

Android Studio 和设备有不同的绘图系统。当他们不同意时,假设您会看到设备的版本。然而,对于这样的事情,我会在各种操作系统版本上进行测试以仔细检查,这是一种对可绘制子系统的实现进行调整可能会破坏你的事情。

顺便说一句 - 我不确定我是否会为此使用 xml drawable。如果你真的想控制它的外观,我会选择矢量绘图或 png 图像。

您的代码中的另一个可能问题 - 您的“头部”中混合了 sp 和 dp 大小。这些是不同的东西。如果视力不好的人的文字有点大,它会打破你。使用其中一种。为此,它应该完全是 dp——没有理由根据文本大小来缩放它。


推荐阅读