android - 为什么 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>
解决方案
看起来“头”被尾巴透支了。丢失的块与绘制尾巴的区域相匹配。如果头是先画的,尾巴是画在上面的,没有透明度,这就是我希望看到的。
Android Studio 和设备有不同的绘图系统。当他们不同意时,假设您会看到设备的版本。然而,对于这样的事情,我会在各种操作系统版本上进行测试以仔细检查,这是一种对可绘制子系统的实现进行调整可能会破坏你的事情。
顺便说一句 - 我不确定我是否会为此使用 xml drawable。如果你真的想控制它的外观,我会选择矢量绘图或 png 图像。
您的代码中的另一个可能问题 - 您的“头部”中混合了 sp 和 dp 大小。这些是不同的东西。如果视力不好的人的文字有点大,它会打破你。使用其中一种。为此,它应该完全是 dp——没有理由根据文本大小来缩放它。
推荐阅读
- google-cloud-platform - 在使用 Cloud Run 和 Stackdriver 时,Micrometer 自定义指标如何适用于具有少量短调用的容器
- performance - 在 SPARQL 屏蔽结果中排序
- maven - Maven 插件可以使用构建依赖项吗?
- ios - Swift语言的StructName.init是什么意思?
- javascript - Oracle Apex IR 图表中的阿拉伯字母
- python - 如何检查列表中的连续负数或正数以及python中的条件?
- c# - 在 dotnet core 3.0 中使用 [Authorize]-attribute 时修改响应内容
- ios - UIView 应该观察通知吗?
- python - 如何使用列表项创建不同的输出?
- python - TensorFlow 2.0.0 ValueError:没有为任何变量提供渐变:['Variable:0']