笔者最近在完善毕设安卓播放器的ui,需要做一个视频拖动控件,使用自定义控件时却遇到一个SeekBar的拖动按钮上下显示不全的bug,网上搜到的解决方式无非以下两个:
(1)把整个大小改成wrapContent(2)设置属性:android:thumbOffset="0dip"
缺点:第一个方法会把SeekBar拉宽,而笔者要的是SeekBar很细(2dp)但是又要能完整显示拖动条的效果(类似B站)。第二个方法只能说让按钮在最左或最右边的部分不会在拉伸时隐藏,并不能解决按钮上下部分显示不全的问题。
原因分析:核心问题是SeekBar的高度不够用,只能显示控件范围内的内容,所以按钮显示不全,但是增加高度让按钮显示出来就连着进度条的宽度也增加了。
解决方案:用相对布局设置两层的toolBar重合在一个位置,上层显示拖动按钮,把progressDrawable(拖动条底下的背景色)设置成透明色,下层显示拖动背景色,按钮设置透明并在代码中的setOnTouch中捕获触摸事件禁止拖动。当上层拖动时通过监听拖动事件来调用下层的setProgress方法来设置进度,就可以实现上层拖动按钮完全显示的情况下,下层进度条颜色跟进。
java层代码:
avToolBarBottom=findViewById(R.id.avseekBarBottom);
avToolBarTop=findViewById(R.id.avseekBarTop);
avToolBarBottom.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
return true;
}
});
avToolBarTop.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
avToolBarBottom.setProgress(i);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
(2)seekBar滚动条无法播放,笔者的原因是因为setMax的值过大,这样是有可能导致不能播放的,因此对此要多注意。