美文网首页
获取坐标

获取坐标

作者: 涛涛123759 | 来源:发表于2017-04-12 14:24 被阅读302次

    1、一个控件在其父窗口中的坐标位置

     View.getLocationInWindow(int[] location)
    

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

    View.getLocationOnScreen(int[] location)
    

    3、view.getLocationInWindow(location); //获取在当前窗口内的绝对坐标;view.getLocationOnScreen(location);//获取在整个屏幕内的绝对坐标。

    4、getLocationInWindow,一个控件在其父窗口中的坐标位置;getLocationOnScreen,一个控件在其整个屏幕上的坐标位置。

    5、getLocationOnScreen获取在整个屏幕内的绝对坐标,注意这个值是要从屏幕顶端算起,也就是包括了通知栏的高度。View.getLocationInWindow()和 View.getLocationOnScreen()在window占据全部screen时,返回值相同,不同的典型情况是在Dialog中时。当Dialog出现在屏幕中间时,View.getLocationOnScreen()取得的值要比View.getLocationInWindow()取得的值要大。

    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];//获取当前位置的纵坐标  
    

    1.获取状态栏高度:
      decorView是window中的最顶层view,可以从window中获取到decorView,然后decorView有个getWindowVisibleDisplayFrame方法可以获取到程序显示的区域,包括标题栏,但不包括状态栏。
      于是,我们就可以算出状态栏的高度了。

    Rect frame = new Rect();
    getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
    int statusBarHeight = frame.top;
    
    Rect frame = new Rect();
    getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
    int statusBarHeight = frame.top;
    

    2.获取标题栏高度:

    getWindow().findViewById(Window.ID_ANDROID_CONTENT)这个方法获取到的view就是程序不包括标题栏的部分,然后就可以知道标题栏的高度了。

    int contentTop = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();
    

    3.获得LinearLayout布局的高和宽

    View view =getLayoutInflater().inflate(R.layout.main,null);  
    LinearLayout linearlayout =(LinearLayout)view.findViewById(R.id.linearlayout);  
    //measure的参数为0即可  
    linearlayout.measure(0,0);  
    //获取组件的宽度  
    int width=linearlayout.getMeasuredWidth();  
    //获取组件的高度  
    int height=linearlayout.getMeasuredHeight(); 
    

    4.获取当前Activity的根视图:

      View rootView = getWindow().getDecorView().findViewById(android.R.id.content); 
    

    或者:

      View rootView = findViewById(android.R.id.content); 
    

    或者:

      View rootView = findViewById(android.R.id.content).getRootView(); 
    

    window、Activity、DecorView、ViewRoot关系

    相关文章

      网友评论

          本文标题:获取坐标

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