seekbar thumb 和drawable同步
时间: 2023-08-02 09:09:38 浏览: 201
要实现SeekBar的Thumb和Drawable同步,可以通过设置SeekBar的Thumb来实现。具体实现方法如下:
1. 首先,为SeekBar设置一个Thumb:
```java
seekBar.setThumb(getResources().getDrawable(R.drawable.thumb));
```
2. 接着,在Thumb的Drawable中添加对应的Drawable状态:
```xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/thumb_pressed"/>
<item android:drawable="@drawable/thumb_normal"/>
</selector>
```
其中,thumb_pressed和thumb_normal是两个Drawable资源,分别代表Thumb在按下和未按下时的状态。
3. 最后,在SeekBar的OnSeekBarChangeListener的方法中,根据SeekBar的进度来更新Thumb的Drawable状态:
```java
seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
Drawable thumbDrawable = seekBar.getThumb();
if (thumbDrawable instanceof StateListDrawable) {
StateListDrawable stateListDrawable = (StateListDrawable) thumbDrawable;
stateListDrawable.setState(new int[]{android.R.attr.state_enabled});
if (progress == 0) {
stateListDrawable.setState(new int[]{android.R.attr.state_enabled, android.R.attr.state_first});
} else if (progress == 100) {
stateListDrawable.setState(new int[]{android.R.attr.state_enabled, android.R.attr.state_last});
} else {
stateListDrawable.setState(new int[]{android.R.attr.state_enabled});
}
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {}
});
```
这段代码中,根据SeekBar的进度来更新Thumb的Drawable状态,如果进度为0,则设置为state_first状态,如果进度为100,则设置为state_last状态,否则设置为state_enabled状态。这样就可以实现SeekBar的Thumb和Drawable同步了。
阅读全文