为什么 xml 可绘制对象在 Android Studio 中看起来与 phone 不同?
Why does the xml drawable look different in Android Studio than the phone?
我正在尝试制作一个看起来像蛇的圆形进度条。
在我的 phone 中,它看起来和我想要的一模一样:
然而,Android Studio 展示了一些非常不同的东西:
也就是说,蛇的“头”被拉长了,偏离了中心...恐怕Android 会在不同的phone 中显示不同的drawables。如何解决?
这是我放置在 res > drawables
中的 drawable 的 progress_gradient.xml
(我在我的 phone 中经过几次尝试和错误后才得出这个):
<?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>
看起来“头”被尾巴透支了。丢失的块与绘制尾巴的区域相匹配。如果先画了头,然后在不透明的情况下画了尾巴,这就是我希望看到的。
Android Studio 和设备有不同的绘图系统。当他们不同意时,假设您会看到设备的版本。然而,对于这样的事情,我会在各种 OS 版本上进行测试以仔细检查,这是一种对可绘制子系统的实现进行调整可能会破坏你的事情。
顺便说一句 - 我不确定我是否会为此使用 xml 可绘制对象。如果你真的想控制它的外观,我会选择矢量可绘制对象或 png 图像。
您的代码中还有一个可能的问题 - 您的“头部”混合了 sp 和 dp 大小。这些是不同的东西。如果视力不好的人将文字放大一点,它会让你崩溃。使用一个或另一个。为此,它应该完全是 dp - 没有理由根据文本大小来缩放它。
我正在尝试制作一个看起来像蛇的圆形进度条。 在我的 phone 中,它看起来和我想要的一模一样:
然而,Android Studio 展示了一些非常不同的东西:
也就是说,蛇的“头”被拉长了,偏离了中心...恐怕Android 会在不同的phone 中显示不同的drawables。如何解决?
这是我放置在 res > drawables
中的 drawable 的 progress_gradient.xml
(我在我的 phone 中经过几次尝试和错误后才得出这个):
<?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>
看起来“头”被尾巴透支了。丢失的块与绘制尾巴的区域相匹配。如果先画了头,然后在不透明的情况下画了尾巴,这就是我希望看到的。
Android Studio 和设备有不同的绘图系统。当他们不同意时,假设您会看到设备的版本。然而,对于这样的事情,我会在各种 OS 版本上进行测试以仔细检查,这是一种对可绘制子系统的实现进行调整可能会破坏你的事情。
顺便说一句 - 我不确定我是否会为此使用 xml 可绘制对象。如果你真的想控制它的外观,我会选择矢量可绘制对象或 png 图像。
您的代码中还有一个可能的问题 - 您的“头部”混合了 sp 和 dp 大小。这些是不同的东西。如果视力不好的人将文字放大一点,它会让你崩溃。使用一个或另一个。为此,它应该完全是 dp - 没有理由根据文本大小来缩放它。