水平进度条添加圆圈指示器

2023-12-19

Im trying to create a custom horizontal progressBar that will have certain amount of circle indicators in it, like this one: enter image description here

谁能告诉我如何实现这种效果(添加圆圈指示器)?


假设您的圆圈指示器都处于设定的间隔(相距相同的距离),在我看来,以下是最合乎逻辑的解决方案

  1. 创建自定义视图
  2. 扩展 ProgressBar,以便您继承所有当前功能,而不必创建自己的 setProgress 方法(etc.)
  3. 创建自定义属性“tickInterval”(我建议将其视为价值点的百分比,而不是观点中的 dp,但您可以使用其中之一)
  4. 如果您想使用 xml 中的视图,请为自定义 attr 创建一个 XML 文件
  5. 绘制视图时,在每个间隔绘制指示器

您可能需要调整视图中的内边距,以确保圈子有空间。以下是您需要的简要说明:

public class TickedProgressBarView extends ProgressBar {

    private static final float DEFAULT_INTERVAL = 25f;
    private float INDICATOR_RADIUS;
    private Paint mTickPaint;
    private float mInterval; //%

    public TickedProgressBarView(Context context) {
        super(context);
        initPainters(context, null); //because draw is called a lot of times, don't want to do loads of allocations in onDraw
    }

    public TickedProgressBarView(Context context, AttributeSet attrs) {
        super(context, attrs);
         initPainters(context, attrs);
    }

    public TickedProgressBarView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        initPainters(context, attrs);
    }

    private void initPainters(Context context, @Nullable AttributeSet attrs) {
        if (attrs != null) {
            TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TickedProgressBarView, 0, 0);
            mInterval = a.getFloat(R.styleable.TickedProgressBarView_tickInterval, DEFAULT_INTERVAL);
        } else {
            mInterval = DEFAULT_INTERVAL;
        }
        //5 on the line below is HALF how many Dp wide you want the circles - ie a 10 Dp circle results from this
        INDICATOR_RADIUS = 5 * getResources().getDisplayMetrics().density + 0.5f;
        mTickPaint = new Paint();
        mTickPaint.setColor(ContextCompat.getColor(getContext(), R.color.my_color));
        mTickPaint.setStyle(Paint.Style.FILL);
        mTickPaint.setStrokeCap(Paint.Cap.ROUND);
    }

    public void setTickInterval(float intervalPercentage) {
        mInterval = intervalPercentage;
        invalidate();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (mInterval > 0f) {
            final float midHeight = canvas.getHeight() / 2f;
            final int end = canvas.getWidth();
            final int intervalPx = (int) ((end / 100f) * mInterval);
            int nextInterval = intervalPx;
            while (nextInterval <= end) {
                canvas.drawCircle(nextInterval, midHeight, INDICATOR_RADIUS, mTickPaint);
                nextInterval += intervalPx;
            }
        }
    }

}

属性.xml

<declare-styleable name="TickedProgressBarView">
    <attr name="tickInterval" format="float" />
</declare-styleable>

attr 声明允许您使用 xml 中的视图

<!-- draw a circle every 10% along the bar -->
<com.my.packge.TickedProgressBarView
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:tickInterval="10.0"
/>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

水平进度条添加圆圈指示器 的相关文章

随机推荐

  • 如何读取 Mahout 聚类输出

    我已经对 Mahout 教程中的合成控制数据运行了 k 均值聚类算法 并且想知道是否有人可以解释如何解释输出 我运行 clusterdump 并收到如下所示的输出 被截断以节省空间 CL 592 n 57 c 30 726 29 813 r
  • 长时间偶然的 Young 垃圾收集暂停

    我们调整 GC 以最小化 stop the world 暂停 Perm 和 Tenured 一代表现良好 Young在大多数情况下工作正常 暂停通常不超过500ms 注意 Times user 0 35 sys 0 02 real 0 06
  • 更新 iPhone 应用程序行为

    我为iPhone设备开发了一款与数据库相关的应用程序 SQlite数据库 现在我想用更多功能更新该应用程序 我想推送同一应用程序的更新 在这里 我在推送更新时更关心用户数据 所以我的问题是 如果我将推送更新 那么更新是否会清除 sqlite
  • 关于 C++ 中的结构化异常 (SEH),我应该了解哪些信息?

    每个 C 开发人员都应该了解有关结构化异常的哪些要点 它们是相当于 Unix 信号的 Win32 可以让您捕获 CPU 异常 例如访问冲突 非法指令 除零等 使用正确的编译器选项 对于 Visual C 为 EHa C 异常使用与堆栈展开相
  • 如何使用 Apache MINA SSHD 阻止 SFTP 删除操作

    我正在尝试使用 Apache Mina SSHD 创建自定义 sftp 服务器 到目前为止我的代码 SshServer sshd SshServer setUpDefaultServer sshd setPort PORT NUMBER s
  • 在数据库中插入数据集记录

    我需要将数据集记录 C 插入 MS Access 数据库表中 我需要批量插入记录 我怎样才能在 C 中做到这一点 对于此类任务 请考虑使用数据适配器 http msdn microsoft com en us library system
  • Prometheusmetrics_path 中的问号被编码

    由于 Prometheus 仅支持文本指标和许多工具返回 json 格式的指标 如 Finatra Spring Boot 因此我创建了一个简单的代理 它将 json 转换为文本 因为我想将它用于多个源 所以要从中检索实际指标的目标是通过查
  • Websocket 消息是否会无序到达?

    如果我们通过同一个 html5 websocket 发送两条消息 彼此间隔毫秒 理论上 消息到达的顺序是否可能与发送的顺序不同 简短回答 不 长答案 WebSocket 通过 TCP 运行 因此在该级别上 EJP 的答案适用 WebSock
  • 运行应用程序脚本后,Google 电子表格冻结

    我的 Google 电子表格中附加了一个应用程序脚本 有一个函数可以在电子表格中执行很多操作 这就是它的作用 创建一个新工作表 设置新工作表的列标题 将数据复制到新工作表中 设置公式 删除多余的列 删除多余的行 在现有工作表中添加一行 工作
  • 指定并保存精确尺寸(以像素为单位)的图形

    假设我有一张尺寸为 3841 x 7195 像素的图像 我想将图形的内容保存到磁盘 从而生成一个图像精确尺寸我以像素为单位指定 没有轴 没有标题 只是图像 我个人并不关心 DPI 因为我只想指定图像在屏幕中在磁盘中所占的大小以像素为单位 我
  • Google 将自动完成功能设置为在 Windows 移动版 IE 浏览器中不起作用

    我们正在为我们的产品建立一个移动网站ridingo http www ridingo com 我们在我们的网站上广泛使用谷歌地点自动完成功能 这用于在用户键入时向他们提供建议 我们在多个浏览器和设备上对此进行了测试 这在 Android 设
  • Android 意图输入 Google Play 音乐应用程序的搜索查询

    您好 我正在尝试使用我的应用程序提供的字符串自动填充 Google Play 音乐上的搜索栏 我目前打算打开 Google Play 音乐 但我无法找到正确的参数来填充 Google Play 音乐上的搜索栏 这是我的代码 Intent i
  • Android webview 性能缓慢

    我正在用 javascript 编写一个游戏 这个应用程序在我的浏览器上运行良好 速度很快 但我在使用 android webview 运行它时遇到了一些麻烦 启动应用程序需要 5 秒或更长时间 我认为这有点慢 但也许这是正常的 在游戏菜单
  • 如何将只读数据发送到其他线程而不进行复制?

    我正在尝试将只读数据的 视图 发送到另一个线程进行处理 基本上主线程确实工作 不断更新一组数据 每当发生更新时 主线程应该将更新的数据发送到其他线程 在那里它们将以只读方式处理它 我不想复制数据 因为它可能非常大 无论如何 主线程还在内存中
  • Linux文件中的List.h?

    in linux include linux list h https github com torvalds linux blob 305230142ae0637213bf6e04f6d9f10bbcb74af8 include linu
  • 如何使用数组作为条件自动过滤

    我刚刚学习如何使用数组 并且对如何使用数组作为自动过滤条件的输入有点困惑 我想设置一个包含值的数组 然后使用这些相同的值过滤 Excel 电子表格 我执行了下面的代码 但是当我尝试自动过滤时它不断抛出错误 这是我的代码 Dim I As I
  • 通过拖放将文件从 Qt 5.2 应用程序复制到文件系统

    如何在 Qt 5 2 应用程序中生成文件拖放操作 以在文件系统 Windows Mac 等 中执行复制 或移动 更具体地说 生成具有 1 个以上文件路径的拖动 当将这些文件拖放到系统上时 将对这些文件执行复制 移动 是否有一个标准的 mim
  • window.opener 在 Windows 版 Excel 中不起作用

    我已经构建了一个 Excel 加载项 它通过以下方式打开一个弹出窗口window open 然后加载项与弹出站点进行通信 我刚刚意识到它在 Windows 的 Excel 中不起作用 原因是弹出窗口无法通过以下方式获取主机 window o
  • 错误“冲突解决程序拒绝突变。”当在放大中删除时

    我有一个简单的全栈放大应用程序 这是我的模型 type Note model auth rules allow public id ID name String description String image String NoteTyp
  • 水平进度条添加圆圈指示器

    Im trying to create a custom horizontal progressBar that will have certain amount of circle indicators in it like this o