ObservableScrollView 实现粘性头部

来源:互联网 发布:雪梨cherie淘宝店铺 编辑:程序博客网 时间:2024/04/28 08:04
public class ObservableScrollView extends ScrollView {    private Callbacks mCallbacks;    public ObservableScrollView(Context context, AttributeSet attrs) {        super(context, attrs);    }    @Override    protected void onScrollChanged(int l, int t, int oldl, int oldt) {        super.onScrollChanged(l, t, oldl, oldt);        if (mCallbacks != null) {            mCallbacks.onScrollChanged(t);        }    }    @Override    public boolean onTouchEvent(MotionEvent ev) {        if (mCallbacks != null) {            switch (ev.getActionMasked()) {                case MotionEvent.ACTION_DOWN:                    mCallbacks.onDownMotionEvent();                    break;                case MotionEvent.ACTION_UP:                case MotionEvent.ACTION_CANCEL:                    mCallbacks.onUpOrCancelMotionEvent();                    break;            }        }        return super.onTouchEvent(ev);    }    @Override    public int computeVerticalScrollRange() {        return super.computeVerticalScrollRange();    }    public void setCallbacks(Callbacks listener) {        mCallbacks = listener;    }    public static interface Callbacks {        public void onScrollChanged(int scrollY);        public void onDownMotionEvent();        public void onUpOrCancelMotionEvent();    }}

设置scollview 属性

scrollView.setCallbacks(this);scrollView.getViewTreeObserver().addOnGlobalLayoutListener(        new ViewTreeObserver.OnGlobalLayoutListener() {            @Override            public void onGlobalLayout() {                onScrollChanged(scrollView.getScrollY());            }        });
实现callback 方法

@Overridepublic void onScrollChanged(int scrollY) {    relayout_categary.setTranslationY(Math.max(viewPlaceHolder.getTop(), scrollY));}


0 0
原创粉丝点击