Android开发中滑动冲突非常常见,基本是是嵌套时出现触摸事件被拦截或者无法传递到。
比如SeekBar和Viewpager,SeekBar和ListView等下面是的内容是摘抄于《SeekBar和Viewpager的滑动冲突的解决办法(其他滑动冲突可参考)》的方法,当然我也百度和谷歌过其他的答案,但是这个答案比较简单,因此摘抄于此。
SeekBar和Viewpager的滑动冲突
SeekBar放在其他视图中,手指放在 SeekBar 上面不会立即触发滑动操作,要滑动一段距离或者松开手指才行。
解决方法
在自定义的Seekbar中onTouchEvent中拦截处理,具体代码如下。
public class DomesticSeekDog extends SeekBar {
public DomesticSeekDog(Context context) {
this(context, null);
}
public DomesticSeekDog(Context context, AttributeSet attrs) {
this(context, attrs, R.attr.seekBarStyle);
}
public DomesticSeekDog(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
//设置父容器不拦截事件
getParent().requestDisallowInterceptTouchEvent(true);
//SeekBar 放在其他视图中,手指放在 SeekBar 上面不会立即触发滑动操作,
//要滑动一段距离或者松开手指才行
//测试过,添加如下代码滑动更流畅
if(event.getAction()==MotionEvent.ACTION_DOWN){
MotionEvent evup = MotionEvent.obtain(event);
evup.setAction(MotionEvent.ACTION_MOVE);
dispatchTouchEvent(evup);
evup.recycle();
}
return super.onTouchEvent(event);
}
}
