【问题标题】:Draw custom Seekbar on Android在 Android 上绘制自定义 Seekbar
【发布时间】:2017-08-28 22:50:57
【问题描述】:

我知道 GitHub 上有很多关于这个的库,还有几个关于这个论点的堆栈溢出问题。但这些都不符合我的需要。

我只需要画这样的东西:

进度线必须是没有拇指的黄色。

提前谢谢你。

【问题讨论】:

  • 我对 Android 比较陌生。我的问题有什么问题?为什么它被否决了?
  • 你试过什么?我们不是代码编写服务
  • 就像我说的,我对 Android 比较陌生。在尝试转换我在堆栈溢出中发现的东西之后,我才意识到如果没有针对我的具体案例的帮助,我就无法做到这一点。非常抱歉,我知道这是一个浪费时间的问题。但我不得不问。
  • 尝试谷歌搜索类似,android 绘制自定义视图
  • 伙计们,您不必编写任何代码,只需向他指出正确的方向,向他解释他有什么工具可以实现类似的目标。不知道为什么投反对票;)

标签: android android-mediaplayer seekbar android-seekbar


【解决方案1】:

你可以使用类似于我解释here的东西。

只需使用矩形而不是圆形。使用 on-size changed 来计算矩形的实际大小,并有一种方法来更改百分比并重新计算矩形大小/重新创建路径。

当您更改路径时,您只需调用invalidate() 即可重新绘制。

伪代码:

public void setProgress(float progress) {
    this.progress = progress;
    refreshProgressBar();
}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    this.currentW = w;
    this.currentH = h;
    refreshProgressBar();
}

private void refreshProgressBar() {
    path.reset();
    // build your clipping path using progress / currentW / currentH
    path.close();
    invalidate();
}

您可以使用单个自定义视图来完成所有操作,也可以将 2 个视图叠加在一起,包含“填充”栏的视图使用我上面解释的方法进行剪裁。

请记住,剪裁发生在画布上。因此,如果您使用自定义视图,只需在绘制进度视图之前设置剪辑,并在完成后将其删除(在这种情况下,您也可以直接绘制颜色 - 但如果您有复杂的颜色模式,剪辑可能会更容易)。如果您使用我给您的链接中的剪辑视图组,您必须相应地构建您的布局,以便剪辑视图只是进度之一。

如果您稍微玩一下数学,您也可以绘制一条与您的艺术作品相匹配的路径,并将其用于布局顶部的全彩色矩形。

如果您将一个 Rectangle 和一个圆相加,然后删除一个圆(使用 OP 在路径上进行加/减/乘),您应该获得一个类似于您手绘的路径(形状) .

祝你好运。

【讨论】:

    【解决方案2】:

    您应该为此创建一个视图。 看看Android creating custom view

    另外,我能想到的更简单的解决方案是创建一个占据整个宽度的矩形进度条,并在中间顶部绘制播放按钮

    【讨论】:

    • 我试试看。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多