Android坐标系

QuibblerQuibbler 2021-01-15 约 7 分钟 1994 次阅读

Android坐标系

Android自定义View开发,首先必须要对Android中的坐标体系非常熟悉。它不同于我们以前数学中所学的笛卡尔坐标系:

1、绝对坐标系

Android中定义整个物理屏幕左上角为原点 O,包括状态栏在内。X轴水平向右,Y轴竖直向下。

2、视图坐标系

Android中的另一个坐标系叫做视图坐标系,不是参照绝对坐标系,而是View参照父控件。View中有多个获取坐标及控件大小相关的方法(单位:像素),开发者需要深入的理解一下它们的意义:

getX();         //子view左边到父视图左边的距离;
    getY();         //子view上边到父视图上边的距离;
    
    getTop();       //获取子View左上角距父View顶部的距离
    getBottom();    //获取子View右下角距父View顶部的距离
    
    getRight();     //获取子View右下角距父View左侧的距离
    getLeft();      //获取子View左上角距父View左侧的距离
    
    getWidth();     //子视图的长度;
    getHeight();    //子视图的高度。

2.1、getX 和 getY

getX()和getY()方法的定义如下:

/**
     *返回该视图的可视x坐标,以像素为单位。.
     */
    public float getX() {
        return mLeft + getTranslationX();
    }
    
    /*
     * 返回该视图的可视y坐标,以像素为单位。.
     */
    public float getY() {
        return mTop + getTranslationY();
    }

2.2、getTop 和 Bottom

getTop()和getBottom()方法的定义如下:

/**
     * 这个视图相对于其父视图的顶部位置。
     *
     * @return The top of this view, in pixels.
     */
    public final int getTop() {
        return mTop;
    }
    
    /**
     * 这个视图相对于其父视图的底部位置。
     *
     * @return The bottom of this view, in pixels.
     */
    public final int getBottom() {
        return mBottom;
    }

2.3、getLeft 和 getRight

getLeft()和getRight()方法的定义如下:

/**
     * 这个视图相对于其父视图的左边位置。
     */
    @ViewDebug.CapturedViewProperty
    public final int getLeft() {
        return mLeft;
    }
    
    /**
     *这个视图相对于其父视图的右边位置。
     */
    @ViewDebug.CapturedViewProperty
    public final int getRight() {
        return mRight;
    }

2.4、getWidth 和 getHeight

getWidth()和getHeight()方法的定义如下:

/**
     * 返回视图的宽度。
     */
    public final int getWidth() {
        return mRight - mLeft;
    }
    
    /**
     * 返回视图的高度。
     */
    public final int getHeight() {
        return mBottom - mTop;
    }

2.5、关系小结

经过上面详细的梳理View中的坐标系及相关方法,可以总结出以下几点,对开发会有一些帮助:

getWidth() = getRigth() - getLeft()

getHeight() = getBottom() - getTop()

getX() == getLeft()  + getTranslationX()

getY() == getTop()  + getTranslationY()

3、触摸坐标系

Android View开发过程中,另一个重要的体系就是事件传递。要对触摸事件的传递有深入的理解,此外这其中也涉及到一些坐标,从屏幕的触摸事件MotionEvent中我们可以获取几个有用的坐标:

getX();     //落点到所触摸的view的左边的距离
    getY();     //落点到所触摸的view的上边的距离
    
    getRawX();  //落点到屏幕左边的距离
    getRawY();  //落点到屏幕上边的距离
    
    getRawX(int pointerIndex); //事件的原始X坐标。
    getRawY(int pointerIndex); //事件的原始Y坐标。

参考博客:

        Android 屏幕坐标总结

        安卓中的坐标系

        Android 屏幕(View)坐标系统

        

相关推荐

WilliamChart:轻量美观的 Android 图表库实战
精选开源

WilliamChart:轻量美观的 Android 图表库实战

WilliamChart:轻量美观的 Android 图表库实战数据可视化是运动、健康、金融、统计类 App 的刚需。MPAndroidChart 功能最全但偏重复杂,WilliamChart 走的则是"轻量 + 美观 + Kotlin 原生"路线——v3 用 Kotlin 完全重写,API 极简,一行 chart.animate(dataSet) 就能把数据画成带动画的折线/柱状/环形图,开箱即

175