往上面那个竖直的seekbar添加一个可随thumb滑动的指示器
时间: 2023-08-02 12:09:39 浏览: 89
好的,可以通过在自定义的VerticalSeekBar类中重写onDraw()方法,在滑块的位置绘制一个指示器来实现。
在VerticalSeekBar类中添加以下代码:
```java
private Drawable thumb;
private Paint paint = new Paint();
private RectF rect = new RectF();
@Override
public void setThumb(Drawable thumb) {
super.setThumb(thumb);
this.thumb = thumb;
}
@Override
protected synchronized void onDraw(Canvas canvas) {
canvas.rotate(-90);
canvas.translate(-getHeight(), 0);
super.onDraw(canvas);
if (thumb != null) {
int thumbTop = (int) ((getHeight() - thumb.getIntrinsicHeight()) * 0.5f);
int thumbLeft = (int) ((getWidth() - thumb.getIntrinsicWidth()) * 0.5f);
thumb.setBounds(thumbLeft, thumbTop, thumbLeft + thumb.getIntrinsicWidth(), thumbTop + thumb.getIntrinsicHeight());
thumb.draw(canvas);
}
paint.setAntiAlias(true);
paint.setColor(Color.WHITE);
float thumbY = getHeight() - (getHeight() * getProgress() / getMax());
rect.left = 0;
rect.top = thumbY - 20;
rect.right = getWidth() - thumb.getIntrinsicWidth() - 20;
rect.bottom = thumbY + 20;
canvas.drawRoundRect(rect, 10, 10, paint);
}
```
通过setThumb()方法设置滑块的Drawable,然后在onDraw()方法中绘制指示器。指示器的绘制使用了一个矩形,位置在滑块的左边,高度为40dp,宽度为SeekBar的宽度减去滑块的宽度再减20dp。指示器的位置根据滑块的位置计算,使用了getHeight()、getProgress()和getMax()方法。
在Activity中,可以这样设置滑块的Drawable并使用:
```java
VerticalSeekBar verticalSeekBar = findViewById(R.id.vertical_seekbar);
Drawable thumb = getResources().getDrawable(R.drawable.thumb);
verticalSeekBar.setThumb(thumb);
```
这样就可以在竖直的SeekBar上添加一个随滑块滑动的指示器了。
阅读全文