最近项目中需要实现一个功能,用seekbar来实现,需要将seekbar分为4段,seekbar最大值为120,然后有一个吸附效果,不多说,上两张效果图:
当滑动条值小于33时,为0;当滑动条值在33到70时,为45;当滑动条值为70到104时,为80;当大于104时,为最大值120。
最开始一直使用的是一个单独的seekbar,在onProgressChanged方法中,时时判断seekbar的progress,然后设置吸附效果,同时更改thumb的图片。然后在滑动条的onStopTrackingTouch方法中发送控制命令,然后等待服务器返回数据更新ui界面。然后问题来了,我在handler中调用到seekbar设置thumb的方法后,设置thumb图片后,thumb消失了。网上查资料说什么需要设置thumb的bounds。照搬过来发现没起作用。只要调用setThumb方法,thumb就消失。反反复复,始终得不到解决,项目又追的急。突然想到一个办法,虽然拙劣,但是实现效果没问题。在seekbar下边先放一个imageview,然后,在seekbar的onProgressChanged方法中根据progress来更改这个imageview的图片,然后设置seekbar的background为透明“#00000000”。然后拖动seekbar,实现了滑动条分段且更改thumb的效果。
开始上代码:
myVerticalSeek_new_wind = (MySeekBar) findViewById(R.id.verticalSeekBar_new_wind);
myVerticalSeek_new_wind.setOnSeekBarChangeListener(onSeekBarChangeListener);
然后seekbar的方法中:
private OnSeekBarChangeListener onSeekBarChangeListener = new OnSeekBarChangeListener() {
@Override
public void onProgressChanged(MySeekBar VerticalSeekBar, int progress,
boolean fromUser) {
//新风 0 33 66 100
if(progress<=33){
progress = 0;
myVerticalSeek_new_wind.setProgress(progress);
new_wind_background_image.setBackgroundResource(R.drawable.new_wind_back_zero1);
}else if(progress>33 && progress<=70){
progress = 45;
myVerticalSeek_new_wind.setProgress(progress);
new_wind_background_image.setBackgroundResource(R.drawable.new_wind_back_one1);
}else if(progress>70 &&progress<=104){
progress = 80;
myVerticalSeek_new_wind.setProgress(progress);
new_wind_background_image.setBackgroundResource(R.drawable.new_wind_back_two1);
}else if(progress>104){
progress =120;
myVerticalSeek_new_wind.setProgress(progress);
new_wind_background_image.setBackgroundResource(R.drawable.new_wind_back_three1);
}
}
@Override
public void onStartTrackingTouch(MySeekBar VerticalSeekBar) {
}
@Override
public void onStopTrackingTouch(MySeekBar VerticalSeekBar) {
sendControlNewWindSpeedValue(VerticalSeekBar.getProgress());
}
};