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); } }
来源
© 版权声明