ViewDragHelper使用介绍

来源:互联网 发布:用数据做电泳图 编辑:程序博客网 时间:2024/05/15 05:12

  • ViewDragHelper是用来干什么的
  • 我们看一下官网介绍
  • 1.他是自定义ViewGroup的工具类
  • 2.提供了操作和状态常量
  • 3.拖放和恢复
  • Callback
  • Callback是ViewDragHelper的内部类
  • 1.是子类父类沟通的桥梁
  • 2.管理拖放的范围
  • 3.为ViewDragHelper提供了事件和方法
  • 具体使用
  • 1.实现Callback的方法
  • 2.通过ViewDragHelper.create创建对象,并传入callback
  • 3.在onInterceptTouchEvent中shouldInterceptTouchEvnet
  • 4.在onTouchEvent中接受 processTouchEvent(event)
  • CallBack方法介绍
  • 1.onViewDragStateChanged    状态改变的时候调用
  • 2.onViewPositionChanged 位置改变
  • 3.onViewCapturedziView捕获
  • 4.onViewReleased释放View
  • 5.onEdgeToched边界触摸
  • 6.onEdgeLock边界锁
  • 7.tryCaptureView是否捕获是关键
  • 8.clampViewPostionHorzontal/Vertical   限制水平或者垂直的距离
  • 具体代码
  • public class DragView extends FrameLayout {    private View mCurrent;    private boolean b;    private ViewDragHelper.Callback callback = new ViewDragHelper.Callback() {        //这里是捕获的关键        @Override        public boolean tryCaptureView(View child, int pointerId) {            return true;        }        //捕获view        @Override        public void onViewCaptured(View capturedChild, int activePointerId) {            String tag = (String) capturedChild.getTag();            switch (tag) {                case "1":                    break;                case "2":                    break;            }        }        //限制水平方向        @Override        public int clampViewPositionHorizontal(View child, int left, int dx) {            return left;        }        // 限制垂直方向        @Override        public int clampViewPositionVertical(View child, int top, int dy) {            return top;        }        @Override        public void onViewReleased(View releasedChild, float xvel, float yvel) {            super.onViewReleased(releasedChild, xvel, yvel);//            这里是回到原来的位置            helper.settleCapturedViewAt(px / 2, py / 2);            invalidate();        }    };    private final int px;    private final int py;    @Override    public void computeScroll() {//        配合回到原来的位置        if (helper.continueSettling(true)) {            invalidate();        }    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        super.onMeasure(widthMeasureSpec, heightMeasureSpec);        int mode = MeasureSpec.getMode(widthMeasureSpec);        int sizeW = MeasureSpec.getSize(widthMeasureSpec);        int sizeH = MeasureSpec.getSize(heightMeasureSpec);        System.out.println(sizeH);    }    private final ViewDragHelper helper;    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)    public DragView(Context context, AttributeSet attrs) {        super(context, attrs);        helper = ViewDragHelper.create(this, 1f, callback);        Configuration configuration = context.getResources().getConfiguration();// px = dip * density/160        int screenWidthDp = configuration.screenWidthDp;        int screenHeightDp = configuration.screenHeightDp;        px = screenWidthDp * configuration.densityDpi / 160;//       得到当前屏幕的密度        py = screenHeightDp * configuration.densityDpi / 160;    }    @Override    public boolean onTouchEvent(MotionEvent event) {//        处理时间        helper.processTouchEvent(event);        return true;    }    @Override    public boolean onInterceptTouchEvent(MotionEvent ev) {//  helper拦截事件        return helper.shouldInterceptTouchEvent(ev);    }}


    1 0
    原创粉丝点击