getX getRawX getY getRawY

来源:互联网 发布:极乐净土动作数据镜头 编辑:程序博客网 时间:2024/05/21 23:34

关于view跟随手指移动,用getX()与getY()、getRawX()与getRawY()的差别


首先: getX   getY是 触摸点距离所触摸控件左上角的距离(并非父容器,而是所触摸的控件)

         getRawX   getRawY是相对屏幕左上角的


private int lastX;private int lastY;

利用getX  getY方式

textView.setOnTouchListener(new View.OnTouchListener() {            @Override            public boolean onTouch(View v, MotionEvent event) {                int x = (int) event.getX();                int y = (int) event.getY();                switch (event.getAction())                {                    case MotionEvent.ACTION_DOWN:                        // 记录触摸点坐标                        lastX = x;                        lastY = y;                        break;                    case MotionEvent.ACTION_MOVE:                        // 计算偏移量                        int offsetX = x - lastX;                        int offsetY = y - lastY;                        // 在当前left、top、right、bottom的基础上加上偏移量                        textView.layout(textView.getLeft() + offsetX,                                textView.getTop() + offsetY,                                textView.getRight() + offsetX,                                textView.getBottom() + offsetY);                        break;                }                return true;            }        });



利用getRawX  getRawY方式

textView.setOnTouchListener(new View.OnTouchListener() {            @Override            public boolean onTouch(View v, MotionEvent event) {                int rawX = (int) event.getRawX();                int rawY = (int) event.getRawY();                switch (event.getAction()) {                    case MotionEvent.ACTION_DOWN:                        // 记录触摸点坐标                        lastX = rawX;                        lastY = rawY;                        break;                    case MotionEvent.ACTION_MOVE:                        // 计算偏移量                        int offsetX = rawX - lastX;                        int offsetY = rawY - lastY;                        // 在当前left、top、right、bottom的基础上加上偏移量                        textView.layout(textView.getLeft() + offsetX,                                textView.getTop() + offsetY,                                textView.getRight() + offsetX,                                textView.getBottom() + offsetY);                        // 重新设置初始坐标                        lastX = rawX;                        lastY = rawY;                        break;                }                return true;            }        });

主要就是move事件有没有重新设置初始坐标的区别

0 0
原创粉丝点击