美文网首页
View的位置指数

View的位置指数

作者: 喝了小酒的 | 来源:发表于2021-04-09 17:29 被阅读0次

view相关

view的left,right,top,bottom是一种相对坐标,相对于父布局
获取方法如下:

Left = getLeft();
Right = getRight();
Top = getTop();
Bottom = getBottom();
view位置指数.png

由上图可知,view的宽高和坐标的关系

width = getRight() - getLeft()
height=  getBottom() - getTop

从3.0开始,view增加了额外的几个参数,x,y,translationX,translationY,其中x,y是view的左上角坐标,translationX和translationY是view左上角相对于父容器的偏移量.默认值为0,他们的关系是:

x = left + translationX
y = top + translationY

MotionEvent

通过MotionEvent可以获取点击事件发生时的x和y坐标,获取方法如下:

        float x = ev.getX();
        float y = ev.getY();
        float rawX = ev.getRawX();
        float rawY = ev.getRawY();

getX/Y与getRawX/Y的不同:
getX相对于当前view的左上角x坐标
getRawX相对于手机屏幕的左上角x坐标

滑动方向判断

基于MotionEvent的x,y坐标,自定义一个view,实现了滑动方向判断的功能

public class MyLinearLayout extends LinearLayout {
    private float mDownX, mDownY, changeX, changeY;

    public MyLinearLayout(Context context) {
        this(context, null);
    }

    public MyLinearLayout(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public MyLinearLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {

        //重点在这里
        int action = ev.getAction();
        switch (action) {
            case MotionEvent.ACTION_DOWN:
                mDownY = ev.getY();
                mDownX = ev.getX();
                break;
            case MotionEvent.ACTION_MOVE:


                break;
            case MotionEvent.ACTION_UP:
                changeX = ev.getX() - mDownX;
                changeY = ev.getY() - mDownY;
                if (Math.abs(changeX) > Math.abs(changeY)) {
                    if (changeX > 0) {
                        Log.e("ada", "右滑");
                    } else {
                        Log.e("ada", "左滑");

                    }
                } else {
                    if (changeY > 0) {
                        Log.e("ada", "下滑");
                    } else {
                        Log.e("ada", "上滑");

                    }
                }
                break;
        }

        //返回true消耗事件
        return true;

    }
}

相关文章

网友评论

      本文标题:View的位置指数

      本文链接:https://www.haomeiwen.com/subject/quqwkltx.html