ViewDragHelper使用介绍

  • 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.onViewCaptured ziView捕获
  • 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);
        }
    
    
    }
    


    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值