• 我的Android进阶之旅------>android中getLocationInWindow 和 getLocationOnScreen的差别


    View.getLocationInWindow(int[] location)

    一个控件在其父窗体中的坐标位置

    View.getLocationOnScreen(int[] location)

    一个控件在其整个屏幕上的坐标位置




    getLocationInWindow是以B为原点的C的坐标

    getLocationOnScreen以A为原点。


    以下是getLocationOnScreen演示样例

    start = (Button) findViewById(R.id.start);
    		int []location=new int[2];
    		start.getLocationOnScreen(location);
    		int x=location[0];//获取当前位置的横坐标
    		int y=location[1];//获取当前位置的纵坐标


    以下是getLocationInWindow演示样例

    start = (Button) findViewById(R.id.start);
    		int []location=new int[2];
    		start.getLocationInWindow(location);
    		int x=location[0];//获取当前位置的横坐标
    		int y=location[1];//获取当前位置的纵坐标

    ==================================================================================================

     附上源码

    ==================================================================================================

    View.getLocationInWindow(int[] location)

    /**
         * <p>Computes the coordinates of this view in its window. The argument
         * must be an array of two integers. After the method returns, the array
         * contains the x and y location in that order.</p>
         *
         * @param location an array of two integers in which to hold the coordinates
         */
        public void getLocationInWindow(int[] location) {
            if (location == null || location.length < 2) {
                throw new IllegalArgumentException("location must be an array of two integers");
            }
    
            if (mAttachInfo == null) {
                // When the view is not attached to a window, this method does not make sense
                location[0] = location[1] = 0;
                return;
            }
    
            float[] position = mAttachInfo.mTmpTransformLocation;
            position[0] = position[1] = 0.0f;
    
            if (!hasIdentityMatrix()) {
                getMatrix().mapPoints(position);
            }
    
            position[0] += mLeft;
            position[1] += mTop;
    
            ViewParent viewParent = mParent;
            while (viewParent instanceof View) {
                final View view = (View) viewParent;
    
                position[0] -= view.mScrollX;
                position[1] -= view.mScrollY;
    
                if (!view.hasIdentityMatrix()) {
                    view.getMatrix().mapPoints(position);
                }
    
                position[0] += view.mLeft;
                position[1] += view.mTop;
    
                viewParent = view.mParent;
             }
    
            if (viewParent instanceof ViewRootImpl) {
                // *cough*
                final ViewRootImpl vr = (ViewRootImpl) viewParent;
                position[1] -= vr.mCurScrollY;
            }
    
            location[0] = (int) (position[0] + 0.5f);
            location[1] = (int) (position[1] + 0.5f);
        }
    View.getLocationOnScreen(int[] location)

      /**
         * <p>Computes the coordinates of this view on the screen. The argument
         * must be an array of two integers. After the method returns, the array
         * contains the x and y location in that order.</p>
         *
         * @param location an array of two integers in which to hold the coordinates
         */
        public void getLocationOnScreen(int[] location) {
            getLocationInWindow(location);
    
            final AttachInfo info = mAttachInfo;
            if (info != null) {
                location[0] += info.mWindowLeft;
                location[1] += info.mWindowTop;
            }
        }



                                ====================================================================================

      作者:欧阳鹏  欢迎转载,与人分享是进步的源泉!

      转载请保留原文地址http://blog.csdn.net/ouyang_peng

    ====================================================================================

     



     
  • 相关阅读:
    【STM32H7教程】第22章 STM32H7的SysTick实现多组软件定时器
    【STM32H7教程】第21章 STM32H7的NVIC中断分组和配置(重要)
    【STM32H7教程】第20章 STM32H7的GPIO应用之无源蜂鸣器
    【STM32H7教程】第19章 STM32H7的GPIO应用之按键FIFO
    【STM32H7教程】第18章 STM32H7的GPIO应用之跑马灯
    【STM32H7教程】第17章 STM32H7之GPIO的HAL库API
    【STM32H7教程】第16章 STM32H7必备的HAL库API(重要)
    【STM32H7教程】第15章 STM32H7的GPIO基础知识(重要)
    git源码安装
    mysql创建用户与授权
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/7123502.html
Copyright © 2020-2023  润新知