将刻度线与 Android SeekBar 对齐
Align tick marks to an Android SeekBar
我正在尝试将一些刻度线指示器添加到 Android 上的 SeekBar。我能够很好地生成带有刻度线的背景,但是我想不出一种方法来将刻度线与实际的 SeekBar 线对齐。正如您从屏幕截图中看到的那样,刻度线实际上在 SeekBar 行之前开始。
我可以通过反复试验找到距离,但我怀疑它是否会在每台设备上保持不变。我还注意到线和背景边缘之间的 space 与拇指滑块的半径相同。但我找不到确定半径的方法,而且我不确定它是否适用于所有设备。
我知道有可用的自定义搜索栏,但我试图避免添加第三方依赖项。
这使用 getThumb().getMinimumWidth() 来近似到 SeekBar 行开头的偏移量。它似乎可以工作,但不确定它是否适用于所有设备。
更新:此代码适用于默认情况,但如果您更改填充,则会中断。最好使用 getPaddingLeft() 和 getPaddingRight() 来确定滑块的长度和位置。这些函数通常会 return 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);
}
我正在尝试将一些刻度线指示器添加到 Android 上的 SeekBar。我能够很好地生成带有刻度线的背景,但是我想不出一种方法来将刻度线与实际的 SeekBar 线对齐。正如您从屏幕截图中看到的那样,刻度线实际上在 SeekBar 行之前开始。
我可以通过反复试验找到距离,但我怀疑它是否会在每台设备上保持不变。我还注意到线和背景边缘之间的 space 与拇指滑块的半径相同。但我找不到确定半径的方法,而且我不确定它是否适用于所有设备。
我知道有可用的自定义搜索栏,但我试图避免添加第三方依赖项。
这使用 getThumb().getMinimumWidth() 来近似到 SeekBar 行开头的偏移量。它似乎可以工作,但不确定它是否适用于所有设备。
更新:此代码适用于默认情况,但如果您更改填充,则会中断。最好使用 getPaddingLeft() 和 getPaddingRight() 来确定滑块的长度和位置。这些函数通常会 return 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);
}