【问题标题】:Align tick marks to an Android SeekBar将刻度线与 Android SeekBar 对齐
【发布时间】:2015-05-26 15:19:16
【问题描述】:

我正在尝试在 Android 上的 SeekBar 上放置一些刻度线指示器。我能够生成带有刻度线的背景就好了,但是我想不出一种方法来将刻度线与实际的 SeekBar 线对齐。从屏幕截图中可以看出,刻度线实际上在 SeekBar 行之前开始。

我可以通过反复试验找到距离,但我怀疑它是否会在每台设备上保持不变。我还注意到线条和背景边缘之间的空间与拇指滑块的半径相同。但我找不到确定该半径是多少的方法,而且我不确定它是否适用于所有设备。

我知道有可用的自定义搜索栏,但我试图避免添加第 3 方依赖项。

【问题讨论】:

  • 您的背景是图像还是以编程方式创建的?
  • 它是通过程序创建的 Bitmap b= Bitmap.createBitmap(w, h, Bitmap.Config.RGB_565);画布 c=新画布(b);油漆 p=新油漆(); p.setColor(Color.WHITE); int offset=this.getThumb().getMinimumWidth();浮动间隔=(float)((width-offset*1.0)/24); for(int i=0;i
  • 格式不好,但上面是我目前使用的代码,不是生成上面截图的。它使用 getThumb().getMinimumWidth() 将偏移量更改为从查找线开始。只是不确定它是否会一直有效。

标签: android seekbar


【解决方案1】:

这使用 getThumb().getMinimumWidth() 来近似偏移到 SeekBar 行的开头。它似乎有效,但不确定它是否适用于所有设备。

更新:此代码适用于默认情况,但如果您更改填充,则会中断。最好使用 getPaddingLeft() 和 getPaddingRight() 来确定滑块的长度和位置。这些函数通常会返回 getThumb().getMinimumWidth()/2,除非填充或缩略图已更改。 getPaddlingLeft() 和 getPaddingRight() 将始终有效。

        Bitmap b= Bitmap.createBitmap(w, h, Bitmap.Config.RGB_565);

        Canvas c=new Canvas(b);
        Paint p=new Paint();
        p.setColor(Color.WHITE);

        int offset=this.getThumb().getMinimumWidth();
        float interval=(float)((width-offset*1.0)/24);
        for(int i=0;i<25;i++){
            float x=i*interval+offset/2;
            c.drawLine(x,0,x,height,p);
            c.drawText(Integer.toString(i),x,height,p);

        }

【讨论】:

  • 请将此添加到您的问题中,而不是作为答案:)
  • 这是我的问题的一个可能答案,如果它在其他设备上工作,我会接受它作为答案。
  • 您能详细介绍一下您的代码吗?似乎您是在 SeekBar 的子类中执行所有这些操作的...... w 和 width 以及 h 和 height 有什么区别?我正在做类似的事情,但我的蜱虫看起来一团糟。
  • 这是一个子类内部的函数,w和h相当于视图的宽度和高度属性。上面的代码在默认情况下确实有效,但我现在有一个更好的答案,我现在会发布。
猜你喜欢
  • 1970-01-01
  • 2020-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多