Android坐标系

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

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)坐标系统

        

相关推荐

精选
ViewPager和PagerAdapter、FragmentPagerAdapter、FragmentStatePager
Android

ViewPager和PagerAdapter、FragmentPagerAdapter、FragmentStatePager

ViewPager1、ViewPagerandroidx.viewpager.widget.ViewPager,Android中使用非常广泛的控件,可以说是APP必备:首次打开引导页、页面Banner广告等。常用方法:setAdapter() 设置适配器setOffscreenPageLimit() 设置缓存的页面个数,默认是 1setCurrentItem() 跳转到特定的页面setOnPage

1.1k
获取Android内置WebView内核版本
Android

获取Android内置WebView内核版本

获取Android内置WebView内核版本竟然能遇到这样奇葩的事情,网页用的技术过于新颖,以至于只支持高版本Chromium内核的,低版本安卓系统中内置的内核版本较低,无法加载前端页面。1、设置查看在系统设置里 > 应用 > 应用管理 > 显示系统应用,查看WebView组件:2、页面查看通过WebView发起的网络请求,都会带上浏览器的UA,通常页面都可以通过UA判断浏览器的内核版本。这里有两

1.1w
Android 14适配总结
Android

Android 14适配总结

Android 14适配总结毕业工作至今已经适配了三个Android大版本,从Android 11到Android 12、再到Android 13。2023年,Google即将推出的Android 14,上半年已经开始第一批适配。现在,第四个Android版本已经适配完,总结记录一下。1、Android 14计划Google一般会在2月份对外发布预告,同时放出开发者预览版。“拉通”各大平台、厂商以

1.1w