首页 > 解决方案 > 水平的 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,因为我无法更改图层的顺序。此外,虚线不会缩放到父级,因为我必须对宽度进行硬编码......

有什么建议或指导方针来实现这一目标吗?

标签: androidseekbar

解决方案


推荐阅读