ViewDragHelper使用模板

来源:互联网 发布:linux route 修改 编辑:程序博客网 时间:2024/06/14 05:15
public class DragViewGroup extends FrameLayout {    private ViewDragHelper mViewDragHelper;    private View mMenuView, mMainView;    private int mWidth;    public DragViewGroup(Context context) {        super(context);        initView();    }    public DragViewGroup(Context context, AttributeSet attrs) {        super(context, attrs);        initView();    }    public DragViewGroup(Context context,                         AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        initView();    }    @Override    protected void onFinishInflate() {        super.onFinishInflate();        mMenuView = getChildAt(0);        mMainView = getChildAt(1);    }    @Override    protected void onSizeChanged(int w, int h, int oldw, int oldh) {        super.onSizeChanged(w, h, oldw, oldh);        mWidth = mMenuView.getMeasuredWidth();    }    @Override    public boolean onInterceptTouchEvent(MotionEvent ev) {        return mViewDragHelper.shouldInterceptTouchEvent(ev);    }    @Override    public boolean onTouchEvent(MotionEvent event) {        //将触摸事件传递给ViewDragHelper,此操作必不可少        mViewDragHelper.processTouchEvent(event);        return true;    }    private void initView() {        mViewDragHelper = ViewDragHelper.create(this, callback);    }    private ViewDragHelper.Callback callback =            new ViewDragHelper.Callback() {                // 何时开始检测触摸事件                @Override                public boolean tryCaptureView(View child, int pointerId) {                    //如果当前触摸的child是mMainView时开始检测                    return mMainView == child;                }                // 触摸到View后回调                @Override                public void onViewCaptured(View capturedChild,                                           int activePointerId) {                    super.onViewCaptured(capturedChild, activePointerId);                }                // 当拖拽状态改变,比如idle,dragging                @Override                public void onViewDragStateChanged(int state) {                    super.onViewDragStateChanged(state);                }                // 当位置改变的时候调用,常用与滑动时更改scale等                @Override                public void onViewPositionChanged(View changedView,                                                  int left, int top, int dx, int dy) {                    super.onViewPositionChanged(changedView, left, top, dx, dy);                }                // 处理垂直滑动                @Override                public int clampViewPositionVertical(View child, int top, int dy) {                    return 0;                }                // 处理水平滑动                @Override                public int clampViewPositionHorizontal(View child, int left, int dx) {                    return left;                }                // 拖动结束后调用                @Override                public void onViewReleased(View releasedChild, float xvel, float yvel) {                    super.onViewReleased(releasedChild, xvel, yvel);                    //手指抬起后缓慢移动到指定位置                    if (mMainView.getLeft() < 500) {                        //关闭菜单                        //相当于Scroller的startScroll方法                        mViewDragHelper.smoothSlideViewTo(mMainView, 0, 0);                        ViewCompat.postInvalidateOnAnimation(DragViewGroup.this);                    } else {                        //打开菜单                        mViewDragHelper.smoothSlideViewTo(mMainView, 300, 0);                        ViewCompat.postInvalidateOnAnimation(DragViewGroup.this);                    }                }            };    @Override    public void computeScroll() {        if (mViewDragHelper.continueSettling(true)) {            ViewCompat.postInvalidateOnAnimation(this);        }    }}

0 0
原创粉丝点击