场景:
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可以设置禁止滑动,之前就写过一片文章,可前往查看