android 中View测量,布局和滑动的属性区分

来源:互联网 发布:铣刀移动网络销售 编辑:程序博客网 时间:2024/05/17 01:46

getRawX():获得当前view的当前位置相对于手机窗体的水平坐标

getX():获得当前view的当前位置相对于他的父容器的水平坐标

getLeft():获得当前view初始位置的左边界相对于他的父容器左边界的水平偏移量

getScrollX():获得当前view的左边界相对于自身的内容的左边界的偏移量,可以为负值

getTranslationX():获得当前view的上一个位置相对于它的初始位置的水平偏移量


代码区分:


private int lastX;private int lastY;@Overridepublic boolean onTouchEvent(MotionEvent event) {    //move时不断获取绝对位置    int x = (int) event.getRawX();    int y = (int) event.getRawY();    switch (event.getAction()) {        case MotionEvent.ACTION_DOWN:            //只在第一次按下时将当前位置记录为起始            lastX = x;            lastY = y;            break;        case MotionEvent.ACTION_MOVE:            //获取移动前位置(即移动后的位置的上一个位置)和初始位置的偏移量            int offsetX = (int) this.getTranslationX();            int offsetY = (int) this.getTranslationY();            //获得移动后位置和移动前位置的偏移量            int dX = x - lastX;            int dY = y - lastY;            //获得总的偏移量并设置为最终位置            int tX = offsetX + dX;            int tY = offsetY + dY;            //移动到最终位置,是个moveBy()操作            this.setTranslationX(tX);            this.setTranslationY(tY);            break;        case MotionEvent.ACTION_UP:            break;    }    //移动完毕,将当前位置记录为下次移动的起始位置    lastX = x;    lastY = y;    return true;}既然要获得总偏移量
 int tX = offsetX + dX;
),完全可以将lastX=x 删掉,比如下面的写法

@Overridepublic boolean onTouchEvent(MotionEvent event) {    //move时不断获取绝对位置    int x = (int) event.getRawX();    int y = (int) event.getRawY();    switch (event.getAction()) {        case MotionEvent.ACTION_DOWN:            //在第一次按下时将当前位置记录为起始            lastX = x;            lastY = y;            break;        case MotionEvent.ACTION_MOVE:           //直接获取当前位置相对于初始位置的总偏移量            int dX = x - lastX;            int dY = y - lastY;                    //移动到最终位置,是个moveBy()操作            this.setTranslationX(dX);            this.setTranslationY(dY);            break;        case MotionEvent.ACTION_UP:            break;    }    return true;}
这个时候滑动一次抬起手指,再次按下会回到起始位置,因为这时lastX = x; dx =0,所以
this.setTranslationX(dX);这个moveBy()操作的参数就是0,就是相对于起始位置没有移动,所以回到原位


2 0
原创粉丝点击