android - 水平的 SeekBar 带有虚线的secondaryProgress,如果进度发生变化,它应该始终显示在顶部
问题描述
我正在尝试用拇指创建一个 SeekBar。它从特定的进度值开始,进度颜色为蓝色。假设它处于 50% 并且用户将拇指向左滑动(将进度降低到 25%),那么我希望将先前的进度值减去新的进度值绘制在 25% 之间的红色虚线水平线中 - 50%。如果用户将拇指滑动到 75% 的进度,我希望将进度的 50% - 75% 绘制在绿色虚线水平线上。我不知道如何在不编写完全自定义的 SeekBar 的情况下实现这一点。
场景 1:(X 是蓝色/当前进度,T 是拇指,P 是前一个值,| 是红色虚线,_ 是空白背景):
[XXXXT||||||P____________]
场景 2:(X 是蓝色/当前进度,T 是拇指,P 是前一个值,| 是绿色虚线,_ 是空白背景):
[XXXXXXXXXXP||||||T______]
我试过创建一个自定义的drawable和设置
android:progressDrawable="@drawable/custom_progress_bar" 用于我的 SeekBar,带有以下 xml:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape>
<corners android:radius="8dp"/>
<stroke android:color="@color/white" android:width="1dp" />
<gradient
android:startColor="@color/whitegrey"
android:endColor="@color/whitegrey"
android:angle="270"
/>
</shape>
</item>
<item android:id="@android:id/secondaryProgress" android:gravity="center">
<clip>
<shape
android:shape="line">
<corners android:radius="8dp"/>
<stroke android:color="@color/white" android:width="1dp" />
<stroke
android:color="@color/red"
android:dashWidth="10px"
android:dashGap="10px"
android:width="10dp"/>
</shape>
</clip>
</item>
<item android:id="@android:id/progress">
<clip>
<shape>
<corners android:radius="8dp"/>
<stroke android:color="@color/white" android:width="1dp" />
<gradient
android:startColor="@color/blue_on_light"
android:endColor="@color/blue_on_light"
android:angle="270" />
</shape>
</clip>
</item>
</layer-list>
但是后来我遇到了一个问题,如果用户通过向右滑动来增加进度,则不会绘制secondaryProgress,因为我无法更改图层的顺序。此外,虚线不会缩放到父级,因为我必须对宽度进行硬编码......
有什么建议或指导方针来实现这一目标吗?
解决方案
推荐阅读
- java - PostForObject - DefaultResponseErrorHandler.handleError
- apache-spark - 如何并行化 Elasticsearch 的 Spark 加载操作?
- python - 外部回归器的 fbprophet 时间序列预测“在列中找到 NaN”
- javascript - 当秒数超过 59 及以上时,easytimer.js 会自动重置
- git - git - 有日志提交但缺少 .sln 文件,因此无法打开项目 - 如何恢复
- python - 如何使用字长作为标记来拆分字符串
- java - 与 Spring MVC 一起使用时的 REST 命名约定
- html - 如何在 WordPress 上修复 amp-auto-ads 并出现错误“无法调整元素大小且溢出不可用”
- cloudkit - 日期字段的 CloudKit 仪表板时区
- arduino - 软件串行错误 ESP8266-01 与 Arduino UNO