Android开发中滑动冲突非常常见,基本是是嵌套时出现触摸事件被拦截或者无法传递到。

比如SeekBarViewpager,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);
    }
}

来源

  1. SeekBar和Viewpager的滑动冲突的解决办法(其他滑动冲突可参考)

相关文章

暂无评论

none
暂无评论...