View的位置指数

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;

    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容