項目需要做一個帶有浮标的seekbar,這個網上的例子不多,我自己也手寫了一個,但不太好用,在網上找了一個例子,但沒有源碼,代碼也缺失很多,我就自己寫好,順便封裝一下,并給出完整Demo。
原創連結:http://blog.csdn.net/u010593680/article/details/50967608
效果圖:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN0LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX90TQPJTU610drRUT0kEVlZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39jNxMTNzQDMwEDOygDM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
關鍵代碼:
//設定字型居中顯示
private void drawText(Canvas canvas) {
float x = (float) (mCurProgress * mOneProgressWidth);
float textWidth = mPaint.measureText(mProgressText);
float textOffset = textWidth / 2;
if (x + textOffset > mWidth - mThumbOffset) {//超過view的右邊
float exWidth = x + textOffset - (mWidth - mThumbOffset);
x -= exWidth;//避免超過右邊
}
if (x + mThumbOffset < textOffset) {//超過左邊
float exWidth = textOffset - (x + mThumbOffset);
x += exWidth;//避免超過左邊
}
canvas.translate(mThumbOffset, 0);
canvas.drawText(mProgressText, x, mHeight, mPaint);
}
//設定顯示的進度位置和字元串
public void setProgress(int progress, String showText) {
mCurProgress = progress;
mProgressText = showText;
invalidate();
}
使用:
seek=(SeekBarWithFloatText)findViewById(R.id.sbwt_seek);
seek.setProgress(50);
完整Demo: http://download.csdn.net/download/y280903468/9953189
==========================分割線=====================================
我後來優化了代碼,隻用一個Java類完成了這個Demo的所有功能,使用非常友善(點選打開連結)