ViewPager 与SeekBar组合滑动

场景:

1、直播回放,进度拖拽,侧滑切换主页

2、视频音乐播放,进度拖拽,侧滑切换音乐列表,视频列表等等

ViewPager +Fragment(嵌套一个可拖拽的进度条SeekBar)

操作情况:

当拖拽SeekBar的时候,ViewPaer总是能够响应事件,进行了侧滑操作,显然这不是预期的效果,造成了SeekBar滑动卡顿,ViewPager不想滑动就偏偏滑动

解决方法:

1、当触摸按下SeekBar的时候,让ViewPager不能够滑动

2、当SeekBar触摸动作抬起或者事件取消的时候,能够让ViewPager可以滑动

代码如下:

1、SeekBar关键代码(我这里是在自定义的直播view中),不能返回true,不然SeekBar.OnSeekBarChangeListener会失效

mSbReplayControlSpeedV2.setOnTouchListener((v, event) -> {
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            //viewpage不能滑动
            if (onSeekBarOperationListener !=null){
                onSeekBarOperationListener.onStart();
            }
            break;
        case MotionEvent.ACTION_UP:
        case MotionEvent.ACTION_CANCEL:
            //viewpager可以滑动
            if (onSeekBarOperationListener !=null){
                onSeekBarOperationListener.onEnd();
            }
            break;
        default:
            break;
    }
    return false;
});
public void setOnSeekBarOperationListener(OnSeekBarOperationListener onSeekBarOperationListener) {
    this.onSeekBarOperationListener = onSeekBarOperationListener;
}

public interface OnSeekBarOperationListener{
    void onStart();
    void onEnd();
}

2、Fragment中处理事件回调操作

mCurrentView.setOnSeekBarOperationListener(new LiveRoomView.OnSeekBarOperationListener() {
    @Override
    public void onStart() {
        EventBus.getDefault().post(new LivingSeekBarEvent(LivingSeekBarEvent.CODE_START));
    }

    @Override
    public void onEnd() {
        EventBus.getDefault().post(new LivingSeekBarEvent(LivingSeekBarEvent.CODE_END));
    }
});

3、Activity接收事件,对ViewPager进行操作

/**
 * 进度条操作
 *
 * @param livingSeekBarEvent
 */
@Subscribe(threadMode = ThreadMode.MAIN)
public void onReceiveLivingSeekBarEvent(LivingSeekBarEvent livingSeekBarEvent) {
    mViewPager.setPagerEnabled(livingSeekBarEvent.code == LivingSeekBarEvent.CODE_END);
}

4、自定义ViewPager可以设置禁止滑动,之前就写过一片文章,可前往查看

https://blog.csdn.net/SEN_NO1/article/details/100269349

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值