关于Android studio seekBar的thumb部分显示的bug和滚动条setMax后无法播放的bug

笔者最近在完善毕设安卓播放器的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的值过大,这样是有可能导致不能播放的,因此对此要多注意。

你可能感兴趣的:(android,studio,android,bug)