您的位置:首页 > 其它

ObservableScrollView 实现粘性头部

2016-03-09 18:15 239 查看
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() {@Overridepublic void onGlobalLayout() {onScrollChanged(scrollView.getScrollY());}});
实现callback 方法
@Overridepublic void onScrollChanged(int scrollY) {relayout_categary.setTranslationY(Math.max(viewPlaceHolder.getTop(), scrollY));}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: