监听滑动事件和消除与内嵌recyclerview冲突的Scrollview

来源:互联网 发布:linux 开源日志服务器 编辑:程序博客网 时间:2024/06/15 20:39

Programming can make computer do what you want them to do!


Ps:srollview默认是没有暴露出onscrollChanged()方法的,所以要写一个ScrollViewListener接口把该方法暴露出来


public class ObservableScrollView extends ScrollView {    private int downX;    private int downY;    private int mTouchSlop;    private ScrollViewListener scrollViewListener = null;    public ObservableScrollView(Context context) {        super(context);        mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();//    }    public ObservableScrollView(Context context, AttributeSet attrs) {        super(context, attrs);        mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();//    }    public ObservableScrollView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();//    }    public void setScrollViewListener(ScrollViewListener scrollViewListener) {        this.scrollViewListener = scrollViewListener;    }    @Override    protected void onScrollChanged(int x, int y, int oldx, int oldy) {        super.onScrollChanged(x, y, oldx, oldy);        if (scrollViewListener != null) {            scrollViewListener.onScrollChanged(this, x, y, oldx, oldy);        }    }    public interface ScrollViewListener {        void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy);    }    @Override    public boolean onInterceptTouchEvent(MotionEvent ev) {        int action = ev.getAction();        switch (action) {            case MotionEvent.ACTION_DOWN:                downX = (int) ev.getRawX();                downY = (int) ev.getRawY();                break;            case MotionEvent.ACTION_MOVE:                int moveY = (int) ev.getRawY();                if (Math.abs(moveY - downY) > mTouchSlop) {                    return true;                }        }        return super.onInterceptTouchEvent(ev);    }}
0 0
原创粉丝点击