Android获取View位置

 public final boolean getGlobalVisibleRect(Rect r)
 public boolean getGlobalVisibleRect(Rect r, Point globalOffset) 

 public final boolean getLocalVisibleRect(Rect r) 
 public void getLocationInWindow(int[] location)
 public void getLocationOnScreen(int[] location) 

 public void getWindowVisibleDisplayFrame(Rect outRect) 

 getLeft()、getTop()、getRight()、getBottom()

 getX()、getY()

 getTranslationX()、getTranslationY()

 getScrollX()、getScrollY()

首先明白Android 全局坐标系和相对坐标系
全局坐标系是整个手机屏幕,相对坐标系是某个View自己的小坐标系
这里写图片描述

先看结论:

getGlobalVisibleRect(Rect r)

     Global表示全局,Visible表示可见,意思就是,计算一个View在全局 坐标系里的可见区域的矩形位置

getGlobalVisibleRect(Rect r, Point globalOffset)

    和getGlobalVisibleRect(Rect r)是一样的但是有一个Point 参数,记录的是View的左上顶点在全局坐标系的里点位置

getLocalVisibleRect(Rect r)

    以View自己为坐标系计算自己的可见矩形区域坐标

getLocationInWindow(int[] location)和getLocationOnScreen(int[] location)

    这两个及其相似,Android里的顶层View是PhoneWindow,里面有个DecorView,InWindow的含义就是以这个PhoneWindow为坐标系,location的数组长度为2,表示View的左上顶点的x、y坐标。OnScreen表示整个屏幕(全局坐标)当我们在Activity中使用时,它们两个的值是一样的,但是当我们在Dialog里使用时,就不一样了,Dialog有自己的DecorView与Activity的DecorView不是一个对象。

getWindowVisibleDisplayFrame(Rect outRect)

    得到窗口的可视区域,不包含状态栏。就是内容区+标题栏

getLeft()、getTop()、getRight()、getBottom()

    以当前view的父View为坐标系,getLeft()、getTop()左上顶点的坐标,getRight()、getBottom()右下顶点的坐标。

getX()、getY()

    相对父容器,左上角的坐标,如果父容器发生滚动ScrollX、ScrollY,对getX( )与getY( )没有影响。
如果view没有移动,getX()、getY()可能会与getLeft()、getTop()相同。
但是但我们直接调用setX( )、setY( )时,getLeft()、getTop()系列的值并没有改变。

getTranslationX()、getTranslationY()

在父容器里的位移,负值是向左或向上。正值向右或向下

getScrollX()、getScrollY()

发生滚动表示view里的内容发生滚动,正值表示内容向左或向上滚动
,负值表示内容向右或向下滚动。滚动的值没有影响子view的坐标位置

实例


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <View
        android:id="@+id/view1"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:padding="0dp"
        android:layout_marginTop="10dp"
        android:translationX="-50dp"
        android:background="#335415" />

    <View
        android:id="@+id/view2"
        android:layout_width="100dp"
        android:padding="0dp"
        android:layout_marginTop="10dp"
        android:layout_height="100dp"
        android:layout_centerHorizontal="true"
        android:background="#335415" />

   <View
        android:id="@+id/view3"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:padding="0dp"
        android:layout_marginTop="10dp"
        android:layout_alignParentRight="true"
        android:translationX="50dp"
        android:background="#335415" />

    <RelativeLayout
        android:id="@+id/viewContainer"
        android:layout_width="300dp"
        android:layout_height="300dp"
        android:padding="0dp"
        android:layout_marginTop="140dp"
        android:layout_centerHorizontal="true"
        android:background="#656151" >

        <View
            android:id="@+id/view4"
            android:layout_width="100dp"
            android:padding="0dp"
            android:layout_height="100dp"
            android:translationX="-50dp"
            android:background="#335415" />

        <View
            android:id="@+id/view5"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:padding="0dp"
            android:layout_centerHorizontal="true"
            android:background="#335415" />

        <View
            android:id="@+id/view6"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:padding="0dp"
            android:layout_alignParentRight="true"
            android:translationX="50dp"
            android:background="#335415" />

        <View
            android:id="@+id/view7"
            android:layout_width="100dp"
            android:layout_height="100dp"
             android:padding="0dp"
            android:layout_centerInParent="true"
            android:background="#335415" />
    </RelativeLayout>
      <RelativeLayout
        android:id="@+id/viewContainer2"
        android:layout_width="300dp"
        android:layout_height="100dp"
         android:padding="0dp"
         android:scrollX="50dp"
         android:scrollY="50dp"
         android:layout_below="@id/viewContainer"
         android:layout_marginTop="140dp"
         android:layout_centerHorizontal="true"
        android:background="#656151" >

        <View
            android:id="@+id/view8"
            android:layout_width="match_parent"
            android:padding="0dp"
            android:layout_height="100dp"
            android:background="#335415" />

    </RelativeLayout>
    <Button 
        android:id="@+id/btnDialog"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="弹出Dialog"
        android:layout_marginTop="10dp"
        android:layout_below="@id/viewContainer2"
        android:layout_centerHorizontal="true"
        />
</RelativeLayout>

这里写图片描述

Dialog的布局和上面的一样,只是没有按钮
这里写图片描述

public class MainActivity extends AppCompatActivity implements OnClickListener {

    private final static String TAG = "viewloaction";

    View view1,view2,view3,view4,view5,view6,view7,view8;
    RelativeLayout viewContainer,viewContainer2;
    Button btnDialog;
    int lastX = 0;
    int lastY = 0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        view1 = findViewById(R.id.view1);
        view2 = findViewById(R.id.view2);
        view3 = findViewById(R.id.view3);
        view3.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                int action = event.getAction();
                switch (action) {
                case MotionEvent.ACTION_DOWN:
                    lastX = (int) event.getRawX();
                    lastY = (int) event.getRawY();
                    break;

                case MotionEvent.ACTION_MOVE:

                int dx = (int) (event.getRawX() - lastX);
                int dy = (int) (event.getRawY() - lastY);
                lastX = (int) event.getRawX();
                lastY = (int) event.getRawY();

                view3.setX(view3.getX()+dx);
                view3.setY(view3.getY()+dy);
                if(view3.getX()<0) view3.setX(0);
                if(view3.getX()>((View)view3.getParent()).getWidth()-view3.getWidth()) view3.setX(((View)view3.getParent()).getWidth()-view3.getWidth());
                if(view3.getY()<0)view3.setY(0);
                if(view3.getY()>((View)view3.getParent()).getHeight()-view3.getHeight()) view3.setY(((View)view3.getParent()).getHeight()-view3.getHeight());
                    break;
                case MotionEvent.ACTION_UP:
                       viewLocation(view3, "view3");
                    break;
                default:
                    break;
                }
                return true;
            }
        });
        viewContainer = (RelativeLayout) findViewById(R.id.viewContainer);
            viewContainer2 = (RelativeLayout) findViewById(R.id.viewContainer2);
        view4 = findViewById(R.id.view4);
        view5 = findViewById(R.id.view5);
        view6 = findViewById(R.id.view6);
        view7 = findViewById(R.id.view7);
        view8 = findViewById(R.id.view8);
        btnDialog = (Button) findViewById(R.id.btnDialog);
        btnDialog.setOnClickListener(this);
        //屏幕的真实尺寸
        WindowManager mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);  
        Display mDisplay = mWindowManager.getDefaultDisplay();  
        DisplayMetrics mDisplayMetrics = new DisplayMetrics();  
        mDisplay.getRealMetrics(mDisplayMetrics);  
        int realScreenW = mDisplayMetrics.widthPixels;
        int realScreenH = mDisplayMetrics.heightPixels;
        Log.i(TAG, "RealMetrics "+"w = "+ realScreenW+"  h = "+realScreenH);

        //屏幕尺寸,可能和屏幕的真实尺寸一样
        mDisplay.getMetrics(mDisplayMetrics);
        int screenW = mDisplayMetrics.widthPixels;
        int screenH = mDisplayMetrics.heightPixels;
        Log.i(TAG, "Metrics "+"density = " +mDisplayMetrics.density);
        Log.i(TAG, "Metrics "+"densityDpi = " +mDisplayMetrics.densityDpi);

        Log.i(TAG, "Metrics "+"w = "+ screenW+"  h = "+screenH);
        Log.i(TAG, "底部动作条(Bottom Sheets) "+"  h = "+(realScreenH - screenH));
        viewContainer.post(new Runnable() {

            public void run() {
                //状态栏的高度
                Log.i(TAG, "状态栏的高度 = " + getStatusBarHeight());  
                //标题栏的高度
                Log.i(TAG, "标题栏的高度 = " + getTitleBarHeight());  

                viewLocation(view1, "view1");
                viewLocation(view2, "view2");
                viewLocation(view3, "view3");
                viewLocation(viewContainer, "viewContainer");
                viewLocation(viewContainer2, "viewContainer2");
                viewLocation(view4, "view4");
                viewLocation(view5, "view5");
                viewLocation(view6, "view6");
                viewLocation(view7, "view7");
                viewLocation(view8, "view8");

            }
        });
    }

    private void viewLocation(View view,String viewName) {
        Rect rect = new Rect() ;
        view.getGlobalVisibleRect(rect);
        Log.i(TAG, viewName+"--getGlobalVisibleRect(rect)>>"+rect);

        Point point = new Point();
        view.getGlobalVisibleRect(rect, point);
        Log.i(TAG, viewName+"--getGlobalVisibleRect(rect, point)>>"
        +rect
        +"point>>"+"("+point.x+","+point.y+")" );

        view.getLocalVisibleRect(rect);
        Log.i(TAG, viewName+"--getLocalVisibleRect(rect)>>"+rect);

        int[] locationInWindow = new int[2];
        view.getLocationInWindow(locationInWindow);
        Log.i(TAG, viewName+"--getLocationInWindow(location)>>"+"("+locationInWindow[0]+","+locationInWindow[1]+")");

        int[] locationOnScreen = new int[2];
        view.getLocationOnScreen(locationOnScreen);
        Log.i(TAG, viewName+"--getLocationOnScreen(location)>>"+"("+locationOnScreen[0]+","+locationOnScreen[1]+")");

        view.getWindowVisibleDisplayFrame(rect);
        Log.i(TAG, viewName+"--getWindowVisibleDisplayFrame(rect)>>"+rect);

        Log.i(TAG, viewName+"--getLeft()="+view.getLeft()+" getTop()="+view.getTop()+" getRight()="+view.getRight()+" getBottom()="+view.getBottom());
Log.i(TAG, viewName+"--getX()="+view.getX()+"      getY()="+view.getY());
        Log.i(TAG, viewName+"--getTranslationX()="+view.getTranslationX()+"  getTranslationY()="+view.getTranslationY());
        Log.i(TAG, viewName+"--getTranslationX()="+view.getTranslationX()+"  getTranslationY()="+view.getTranslationY());
        Log.i(TAG, viewName+"--getScrollX()="+view.getScrollX()+"  getScrollY()="+view.getScrollY());   

        Log.i(TAG, "-------------------------------------------"); 

    } 

    private int getStatusBarHeight() {  
        //方法一
//      Resources resources = getResources();  
//      int resourceId = resources.getIdentifier("status_bar_height", "dimen","android");  
//      int statusBarHeight = resources.getDimensionPixelSize(resourceId); 
        //方法二,注意要等到窗口加载好后调用
        Rect frame = new Rect();  
        getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);  
        int statusBarHeight = frame.top; //状态栏高度 
        return statusBarHeight;  
    } 


    private int getTitleBarHeight(){
        int titleBarHeight = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();  
        return titleBarHeight;
    }

    public void onClick(View v) {
        final Dialog dialog = new Dialog(this);
        final View view = getLayoutInflater().inflate(R.layout.activity_dialog, null,false);
        dialog.addContentView(view, new LayoutParams(  
                LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
        dialog.setOnShowListener(new OnShowListener() {
            public void onShow(DialogInterface dialo) {
                Log.i(TAG, "######################################");
                View dialogDecorView = dialog.getWindow().getDecorView();
                View activityDecorView = getWindow().getDecorView();

                Log.i(TAG, "dialogDecorView ==activityDecorView >>"+(activityDecorView==dialogDecorView ));
//              View peekDecor = dialog.getWindow().peekDecorView();
                dialogDecorView.setBackground(new ColorDrawable(Color.parseColor("#81d4fa")));
//              peekDecor.setBackground(new ColorDrawable(Color.rgb(0, 255, 0)));
                viewLocation(dialogDecorView, "dialogView");
                dialogLocation(dialogDecorView, "dialog");
            }
        });
        dialog.show();
    }

    private void dialogLocation(View view,String name){
        for(int i = 0,len =((ViewGroup)view).getChildCount();i<len;i++ ){
            View childView  = ((ViewGroup)view).getChildAt(i);
            viewLocation(((ViewGroup)(view)).getChildAt(i), name+i);
            if(childView instanceof ViewGroup &&((ViewGroup)(childView)).getChildCount()>0){
                dialogLocation(childView,name+i+"--");
            }
        }
    }
}
 RealMetrics w = 1200  h = 1920
 Metrics density = 2.0
 Metrics densityDpi = 320
 Metrics w = 1200  h = 1824
 底部动作条(Bottom Sheets)   h = 96
 状态栏的高度 = 50
 标题栏的高度 = 128
 view1--getGlobalVisibleRect(rect)>>Rect(0, 198 - 100, 398)
 view1--getGlobalVisibleRect(rect, point)>>Rect(0, 198 - 100, 398)point>>(-99,198)
 view1--getLocalVisibleRect(rect)>>Rect(99, 0 - 199, 200)
 view1--getLocationInWindow(location)>>(-99,198)
 view1--getLocationOnScreen(location)>>(-99,198)
 view1--getWindowVisibleDisplayFrame(rect)>>Rect(0, 50 - 1200, 1824)
 view1--getLeft()=0 getTop()=20 getRight()=200 getBottom()=220
 view1--getX()=-100.0      getY()=20.0
 view1--getTranslationX()=-100.0  getTranslationY()=0.0
 view1--getTranslationX()=-100.0  getTranslationY()=0.0
 view1--getScrollX()=0  getScrollY()=0
 -------------------------------------------
 view2--getGlobalVisibleRect(rect)>>Rect(500, 198 - 700, 398)
 view2--getGlobalVisibleRect(rect, point)>>Rect(500, 198 - 700, 398)point>>(500,198)
 view2--getLocalVisibleRect(rect)>>Rect(0, 0 - 200, 200)
 view2--getLocationInWindow(location)>>(500,198)
 view2--getLocationOnScreen(location)>>(500,198)
 view2--getWindowVisibleDisplayFrame(rect)>>Rect(0, 50 - 1200, 1824)
 view2--getLeft()=500 getTop()=20 getRight()=700 getBottom()=220
 view2--getX()=500.0      getY()=20.0
 view2--getTranslationX()=0.0  getTranslationY()=0.0
 view2--getTranslationX()=0.0  getTranslationY()=0.0
 view2--getScrollX()=0  getScrollY()=0
 -------------------------------------------
 view3--getGlobalVisibleRect(rect)>>Rect(1100, 198 - 1200, 398)
 view3--getGlobalVisibleRect(rect, point)>>Rect(1100, 198 - 1200, 398)point>>(1100,198)
 view3--getLocalVisibleRect(rect)>>Rect(0, 0 - 100, 200)
 view3--getLocationInWindow(location)>>(1100,198)
 view3--getLocationOnScreen(location)>>(1100,198)
 view3--getWindowVisibleDisplayFrame(rect)>>Rect(0, 50 - 1200, 1824)
 view3--getLeft()=1000 getTop()=20 getRight()=1200 getBottom()=220
 view3--getX()=1100.0      getY()=20.0
 view3--getTranslationX()=100.0  getTranslationY()=0.0
 view3--getTranslationX()=100.0  getTranslationY()=0.0
 view3--getScrollX()=0  getScrollY()=0
 -------------------------------------------
 viewContainer--getGlobalVisibleRect(rect)>>Rect(300, 458 - 900, 1058)
 viewContainer--getGlobalVisibleRect(rect, point)>>Rect(300, 458 - 900, 1058)point>>(300,458)
 viewContainer--getLocalVisibleRect(rect)>>Rect(0, 0 - 600, 600)
 viewContainer--getLocationInWindow(location)>>(300,458)
 viewContainer--getLocationOnScreen(location)>>(300,458)
 viewContainer--getWindowVisibleDisplayFrame(rect)>>Rect(0, 50 - 1200, 1824)
 viewContainer--getLeft()=300 getTop()=280 getRight()=900 getBottom()=880
 viewContainer--getX()=300.0      getY()=280.0
 viewContainer--getTranslationX()=0.0  getTranslationY()=0.0
 viewContainer--getTranslationX()=0.0  getTranslationY()=0.0
 viewContainer--getScrollX()=0  getScrollY()=0
 -------------------------------------------
 viewContainer2--getGlobalVisibleRect(rect)>>Rect(300, 1338 - 900, 1538)
 viewContainer2--getGlobalVisibleRect(rect, point)>>Rect(300, 1338 - 900, 1538)point>>(200,1238)
 viewContainer2--getLocalVisibleRect(rect)>>Rect(100, 100 - 700, 300)
 viewContainer2--getLocationInWindow(location)>>(300,1338)
 viewContainer2--getLocationOnScreen(location)>>(300,1338)
 viewContainer2--getWindowVisibleDisplayFrame(rect)>>Rect(0, 50 - 1200, 1824)
 viewContainer2--getLeft()=300 getTop()=1160 getRight()=900 getBottom()=1360
 viewContainer2--getX()=300.0      getY()=1160.0
 viewContainer2--getTranslationX()=0.0  getTranslationY()=0.0
 viewContainer2--getTranslationX()=0.0  getTranslationY()=0.0
 viewContainer2--getScrollX()=100  getScrollY()=100
 -------------------------------------------
 view4--getGlobalVisibleRect(rect)>>Rect(300, 458 - 400, 658)
 view4--getGlobalVisibleRect(rect, point)>>Rect(300, 458 - 400, 658)point>>(201,458)
 view4--getLocalVisibleRect(rect)>>Rect(99, 0 - 199, 200)
 view4--getLocationInWindow(location)>>(200,458)
 view4--getLocationOnScreen(location)>>(200,458)
 view4--getWindowVisibleDisplayFrame(rect)>>Rect(0, 50 - 1200, 1824)
 view4--getLeft()=0 getTop()=0 getRight()=200 getBottom()=200
 view4--getX()=-100.0      getY()=0.0
 view4--getTranslationX()=-100.0  getTranslationY()=0.0
 view4--getTranslationX()=-100.0  getTranslationY()=0.0
 view4--getScrollX()=0  getScrollY()=0
 -------------------------------------------
 view5--getGlobalVisibleRect(rect)>>Rect(500, 458 - 700, 658)
 view5--getGlobalVisibleRect(rect, point)>>Rect(500, 458 - 700, 658)point>>(500,458)
 view5--getLocalVisibleRect(rect)>>Rect(0, 0 - 200, 200)
 view5--getLocationInWindow(location)>>(500,458)
 view5--getLocationOnScreen(location)>>(500,458)
 view5--getWindowVisibleDisplayFrame(rect)>>Rect(0, 50 - 1200, 1824)
 view5--getLeft()=200 getTop()=0 getRight()=400 getBottom()=200
 view5--getX()=200.0      getY()=0.0
 view5--getTranslationX()=0.0  getTranslationY()=0.0
 view5--getTranslationX()=0.0  getTranslationY()=0.0
 view5--getScrollX()=0  getScrollY()=0
 -------------------------------------------
 view6--getGlobalVisibleRect(rect)>>Rect(800, 458 - 900, 658)
 view6--getGlobalVisibleRect(rect, point)>>Rect(800, 458 - 900, 658)point>>(800,458)
 view6--getLocalVisibleRect(rect)>>Rect(0, 0 - 100, 200)
 view6--getLocationInWindow(location)>>(800,458)
 view6--getLocationOnScreen(location)>>(800,458)
 view6--getWindowVisibleDisplayFrame(rect)>>Rect(0, 50 - 1200, 1824)
 view6--getLeft()=400 getTop()=0 getRight()=600 getBottom()=200
 view6--getX()=500.0      getY()=0.0
 view6--getTranslationX()=100.0  getTranslationY()=0.0
 view6--getTranslationX()=100.0  getTranslationY()=0.0
 view6--getScrollX()=0  getScrollY()=0
 -------------------------------------------
 view7--getGlobalVisibleRect(rect)>>Rect(500, 658 - 700, 858)
 view7--getGlobalVisibleRect(rect, point)>>Rect(500, 658 - 700, 858)point>>(500,658)
 view7--getLocalVisibleRect(rect)>>Rect(0, 0 - 200, 200)
 view7--getLocationInWindow(location)>>(500,658)
 view7--getLocationOnScreen(location)>>(500,658)
 view7--getWindowVisibleDisplayFrame(rect)>>Rect(0, 50 - 1200, 1824)
 view7--getLeft()=200 getTop()=200 getRight()=400 getBottom()=400
 view7--getX()=200.0      getY()=200.0
 view7--getTranslationX()=0.0  getTranslationY()=0.0
 view7--getTranslationX()=0.0  getTranslationY()=0.0
 view7--getScrollX()=0  getScrollY()=0
 -------------------------------------------
 view8--getGlobalVisibleRect(rect)>>Rect(300, 1338 - 800, 1438)
 view8--getGlobalVisibleRect(rect, point)>>Rect(300, 1338 - 800, 1438)point>>(200,1238)
 view8--getLocalVisibleRect(rect)>>Rect(100, 100 - 600, 200)
 view8--getLocationInWindow(location)>>(200,1238)
 view8--getLocationOnScreen(location)>>(200,1238)
 view8--getWindowVisibleDisplayFrame(rect)>>Rect(0, 50 - 1200, 1824)
 view8--getLeft()=0 getTop()=0 getRight()=600 getBottom()=200
 view8--getX()=0.0      getY()=0.0
 view8--getTranslationX()=0.0  getTranslationY()=0.0
 view8--getTranslationX()=0.0  getTranslationY()=0.0
 view8--getScrollX()=0  getScrollY()=0
 -------------------------------------------
 ######################################
 dialogDecorView ==activityDecorView >>false
 dialogView--getGlobalVisibleRect(rect)>>Rect(0, 0 - 1160, 1044)
 dialogView--getGlobalVisibleRect(rect, point)>>Rect(0, 0 - 1160, 1044)point>>(0,0)
 dialogView--getLocalVisibleRect(rect)>>Rect(0, 0 - 1160, 1044)
 dialogView--getLocationInWindow(location)>>(0,0)
 dialogView--getLocationOnScreen(location)>>(20,415)
 dialogView--getWindowVisibleDisplayFrame(rect)>>Rect(0, 50 - 1200, 1824)
 dialogView--getLeft()=0 getTop()=0 getRight()=1160 getBottom()=1044
 dialogView--getX()=0.0      getY()=0.0
 dialogView--getTranslationX()=0.0  getTranslationY()=0.0
 dialogView--getTranslationX()=0.0  getTranslationY()=0.0
 dialogView--getScrollX()=0  getScrollY()=0
 -------------------------------------------
 dialog0--getGlobalVisibleRect(rect)>>Rect(16, 16 - 1144, 1028)
 dialog0--getGlobalVisibleRect(rect, point)>>Rect(16, 16 - 1144, 1028)point>>(16,16)
 dialog0--getLocalVisibleRect(rect)>>Rect(0, 0 - 1128, 1012)
 dialog0--getLocationInWindow(location)>>(16,16)
 dialog0--getLocationOnScreen(location)>>(36,431)
 dialog0--getWindowVisibleDisplayFrame(rect)>>Rect(0, 50 - 1200, 1824)
 dialog0--getLeft()=16 getTop()=16 getRight()=1144 getBottom()=1028
 dialog0--getX()=16.0      getY()=16.0
 dialog0--getTranslationX()=0.0  getTranslationY()=0.0
 dialog0--getTranslationX()=0.0  getTranslationY()=0.0
 dialog0--getScrollX()=0  getScrollY()=0
 -------------------------------------------
 dialog0--0--getGlobalVisibleRect(rect)>>Rect(16, 16 - 1144, 144)
 dialog0--0--getGlobalVisibleRect(rect, point)>>Rect(16, 16 - 1144, 144)point>>(16,16)
 dialog0--0--getLocalVisibleRect(rect)>>Rect(0, 0 - 1128, 128)
 dialog0--0--getLocationInWindow(location)>>(16,16)
 dialog0--0--getLocationOnScreen(location)>>(36,431)
 dialog0--0--getWindowVisibleDisplayFrame(rect)>>Rect(0, 50 - 1200, 1824)
 dialog0--0--getLeft()=0 getTop()=0 getRight()=1128 getBottom()=128
 dialog0--0--getX()=0.0      getY()=0.0
 dialog0--0--getTranslationX()=0.0  getTranslationY()=0.0
 dialog0--0--getTranslationX()=0.0  getTranslationY()=0.0
 dialog0--0--getScrollX()=0  getScrollY()=0
 -------------------------------------------
 dialog0--1--getGlobalVisibleRect(rect)>>Rect(16, 144 - 1144, 148)
 dialog0--1--getGlobalVisibleRect(rect, point)>>Rect(16, 144 - 1144, 148)point>>(16,144)
 dialog0--1--getLocalVisibleRect(rect)>>Rect(0, 0 - 1128, 4)
 dialog0--1--getLocationInWindow(location)>>(16,144)
 dialog0--1--getLocationOnScreen(location)>>(36,559)
 dialog0--1--getWindowVisibleDisplayFrame(rect)>>Rect(0, 50 - 1200, 1824)
 dialog0--1--getLeft()=0 getTop()=128 getRight()=1128 getBottom()=132
 dialog0--1--getX()=0.0      getY()=128.0
 dialog0--1--getTranslationX()=0.0  getTranslationY()=0.0
 dialog0--1--getTranslationX()=0.0  getTranslationY()=0.0
 dialog0--1--getScrollX()=0  getScrollY()=0
 -------------------------------------------
 dialog0--2--getGlobalVisibleRect(rect)>>Rect(16, 148 - 1144, 1028)
 dialog0--2--getGlobalVisibleRect(rect, point)>>Rect(16, 148 - 1144, 1028)point>>(16,148)
 dialog0--2--getLocalVisibleRect(rect)>>Rect(0, 0 - 1128, 880)
 dialog0--2--getLocationInWindow(location)>>(16,148)
 dialog0--2--getLocationOnScreen(location)>>(36,563)
 dialog0--2--getWindowVisibleDisplayFrame(rect)>>Rect(0, 50 - 1200, 1824)
 dialog0--2--getLeft()=0 getTop()=132 getRight()=1128 getBottom()=1012
 dialog0--2--getX()=0.0      getY()=132.0
 dialog0--2--getTranslationX()=0.0  getTranslationY()=0.0
 dialog0--2--getTranslationX()=0.0  getTranslationY()=0.0
 dialog0--2--getScrollX()=0  getScrollY()=0
 -------------------------------------------
 dialog0--2--0--getGlobalVisibleRect(rect)>>Rect(16, 148 - 1144, 1028)
 dialog0--2--0--getGlobalVisibleRect(rect, point)>>Rect(16, 148 - 1144, 1028)point>>(16,148)
 dialog0--2--0--getLocalVisibleRect(rect)>>Rect(0, 0 - 1128, 880)
 dialog0--2--0--getLocationInWindow(location)>>(16,148)
 dialog0--2--0--getLocationOnScreen(location)>>(36,563)
 dialog0--2--0--getWindowVisibleDisplayFrame(rect)>>Rect(0, 50 - 1200, 1824)
 dialog0--2--0--getLeft()=0 getTop()=0 getRight()=1128 getBottom()=880
 dialog0--2--0--getX()=0.0      getY()=0.0
 dialog0--2--0--getTranslationX()=0.0  getTranslationY()=0.0
 dialog0--2--0--getTranslationX()=0.0  getTranslationY()=0.0
 dialog0--2--0--getScrollX()=0  getScrollY()=0
 -------------------------------------------
 dialog0--2--0--0--getGlobalVisibleRect(rect)>>Rect(16, 148 - 1144, 1028)
 dialog0--2--0--0--getGlobalVisibleRect(rect, point)>>Rect(16, 148 - 1144, 1028)point>>(16,148)
 dialog0--2--0--0--getLocalVisibleRect(rect)>>Rect(0, 0 - 1128, 880)
 dialog0--2--0--0--getLocationInWindow(location)>>(16,148)
 dialog0--2--0--0--getLocationOnScreen(location)>>(36,563)
 dialog0--2--0--0--getWindowVisibleDisplayFrame(rect)>>Rect(0, 50 - 1200, 1824)
 dialog0--2--0--0--getLeft()=0 getTop()=0 getRight()=1128 getBottom()=880
 dialog0--2--0--0--getX()=0.0      getY()=0.0
 dialog0--2--0--0--getTranslationX()=0.0  getTranslationY()=0.0
 dialog0--2--0--0--getTranslationX()=0.0  getTranslationY()=0.0
 dialog0--2--0--0--getScrollX()=0  getScrollY()=0
 -------------------------------------------
 dialog0--2--0--0--0--getGlobalVisibleRect(rect)>>Rect(16, 168 - 116, 368)
 dialog0--2--0--0--0--getGlobalVisibleRect(rect, point)>>Rect(16, 168 - 116, 368)point>>(-83,168)
 dialog0--2--0--0--0--getLocalVisibleRect(rect)>>Rect(99, 0 - 199, 200)
 dialog0--2--0--0--0--getLocationInWindow(location)>>(-83,168)
 dialog0--2--0--0--0--getLocationOnScreen(location)>>(-63,583)
 dialog0--2--0--0--0--getWindowVisibleDisplayFrame(rect)>>Rect(0, 50 - 1200, 1824)
 dialog0--2--0--0--0--getLeft()=0 getTop()=20 getRight()=200 getBottom()=220
 dialog0--2--0--0--0--getX()=-100.0      getY()=20.0
 dialog0--2--0--0--0--getTranslationX()=-100.0  getTranslationY()=0.0
 dialog0--2--0--0--0--getTranslationX()=-100.0  getTranslationY()=0.0
 dialog0--2--0--0--0--getScrollX()=0  getScrollY()=0
 -------------------------------------------
 dialog0--2--0--0--1--getGlobalVisibleRect(rect)>>Rect(480, 168 - 680, 368)
 dialog0--2--0--0--1--getGlobalVisibleRect(rect, point)>>Rect(480, 168 - 680, 368)point>>(480,168)
 dialog0--2--0--0--1--getLocalVisibleRect(rect)>>Rect(0, 0 - 200, 200)
 dialog0--2--0--0--1--getLocationInWindow(location)>>(480,168)
 dialog0--2--0--0--1--getLocationOnScreen(location)>>(500,583)
 dialog0--2--0--0--1--getWindowVisibleDisplayFrame(rect)>>Rect(0, 50 - 1200, 1824)
 dialog0--2--0--0--1--getLeft()=464 getTop()=20 getRight()=664 getBottom()=220
 dialog0--2--0--0--1--getX()=464.0      getY()=20.0
 dialog0--2--0--0--1--getTranslationX()=0.0  getTranslationY()=0.0
 dialog0--2--0--0--1--getTranslationX()=0.0  getTranslationY()=0.0
 dialog0--2--0--0--1--getScrollX()=0  getScrollY()=0
 -------------------------------------------
 dialog0--2--0--0--2--getGlobalVisibleRect(rect)>>Rect(1044, 168 - 1144, 368)
 dialog0--2--0--0--2--getGlobalVisibleRect(rect, point)>>Rect(1044, 168 - 1144, 368)point>>(1044,168)
 dialog0--2--0--0--2--getLocalVisibleRect(rect)>>Rect(0, 0 - 100, 200)
 dialog0--2--0--0--2--getLocationInWindow(location)>>(1044,168)
 dialog0--2--0--0--2--getLocationOnScreen(location)>>(1064,583)
 dialog0--2--0--0--2--getWindowVisibleDisplayFrame(rect)>>Rect(0, 50 - 1200, 1824)
 dialog0--2--0--0--2--getLeft()=928 getTop()=20 getRight()=1128 getBottom()=220
 dialog0--2--0--0--2--getX()=1028.0      getY()=20.0
 dialog0--2--0--0--2--getTranslationX()=100.0  getTranslationY()=0.0
 dialog0--2--0--0--2--getTranslationX()=100.0  getTranslationY()=0.0
 dialog0--2--0--0--2--getScrollX()=0  getScrollY()=0
 -------------------------------------------
 dialog0--2--0--0--3--getGlobalVisibleRect(rect)>>Rect(280, 428 - 880, 1028)
 dialog0--2--0--0--3--getGlobalVisibleRect(rect, point)>>Rect(280, 428 - 880, 1028)point>>(280,428)
 dialog0--2--0--0--3--getLocalVisibleRect(rect)>>Rect(0, 0 - 600, 600)
 dialog0--2--0--0--3--getLocationInWindow(location)>>(280,428)
 dialog0--2--0--0--3--getLocationOnScreen(location)>>(300,843)
 dialog0--2--0--0--3--getWindowVisibleDisplayFrame(rect)>>Rect(0, 50 - 1200, 1824)
 dialog0--2--0--0--3--getLeft()=264 getTop()=280 getRight()=864 getBottom()=880
 dialog0--2--0--0--3--getX()=264.0      getY()=280.0
 dialog0--2--0--0--3--getTranslationX()=0.0  getTranslationY()=0.0
 dialog0--2--0--0--3--getTranslationX()=0.0  getTranslationY()=0.0
 dialog0--2--0--0--3--getScrollX()=0  getScrollY()=0
 -------------------------------------------
 dialog0--2--0--0--3--0--getGlobalVisibleRect(rect)>>Rect(280, 428 - 380, 628)
 dialog0--2--0--0--3--0--getGlobalVisibleRect(rect, point)>>Rect(280, 428 - 380, 628)point>>(181,428)
 dialog0--2--0--0--3--0--getLocalVisibleRect(rect)>>Rect(99, 0 - 199, 200)
 dialog0--2--0--0--3--0--getLocationInWindow(location)>>(180,428)
 dialog0--2--0--0--3--0--getLocationOnScreen(location)>>(200,843)
 dialog0--2--0--0--3--0--getWindowVisibleDisplayFrame(rect)>>Rect(0, 50 - 1200, 1824)
 dialog0--2--0--0--3--0--getLeft()=0 getTop()=0 getRight()=200 getBottom()=200
 dialog0--2--0--0--3--0--getX()=-100.0      getY()=0.0
 dialog0--2--0--0--3--0--getTranslationX()=-100.0  getTranslationY()=0.0
 dialog0--2--0--0--3--0--getTranslationX()=-100.0  getTranslationY()=0.0
 dialog0--2--0--0--3--0--getScrollX()=0  getScrollY()=0
 -------------------------------------------
 dialog0--2--0--0--3--1--getGlobalVisibleRect(rect)>>Rect(480, 428 - 680, 628)
 dialog0--2--0--0--3--1--getGlobalVisibleRect(rect, point)>>Rect(480, 428 - 680, 628)point>>(480,428)
 dialog0--2--0--0--3--1--getLocalVisibleRect(rect)>>Rect(0, 0 - 200, 200)
 dialog0--2--0--0--3--1--getLocationInWindow(location)>>(480,428)
 dialog0--2--0--0--3--1--getLocationOnScreen(location)>>(500,843)
 dialog0--2--0--0--3--1--getWindowVisibleDisplayFrame(rect)>>Rect(0, 50 - 1200, 1824)
 dialog0--2--0--0--3--1--getLeft()=200 getTop()=0 getRight()=400 getBottom()=200
 dialog0--2--0--0--3--1--getX()=200.0      getY()=0.0
 dialog0--2--0--0--3--1--getTranslationX()=0.0  getTranslationY()=0.0
 dialog0--2--0--0--3--1--getTranslationX()=0.0  getTranslationY()=0.0
 dialog0--2--0--0--3--1--getScrollX()=0  getScrollY()=0
 -------------------------------------------
 dialog0--2--0--0--3--2--getGlobalVisibleRect(rect)>>Rect(780, 428 - 880, 628)
 dialog0--2--0--0--3--2--getGlobalVisibleRect(rect, point)>>Rect(780, 428 - 880, 628)point>>(780,428)
 dialog0--2--0--0--3--2--getLocalVisibleRect(rect)>>Rect(0, 0 - 100, 200)
 dialog0--2--0--0--3--2--getLocationInWindow(location)>>(780,428)
 dialog0--2--0--0--3--2--getLocationOnScreen(location)>>(800,843)
 dialog0--2--0--0--3--2--getWindowVisibleDisplayFrame(rect)>>Rect(0, 50 - 1200, 1824)
 dialog0--2--0--0--3--2--getLeft()=400 getTop()=0 getRight()=600 getBottom()=200
 dialog0--2--0--0--3--2--getX()=500.0      getY()=0.0
 dialog0--2--0--0--3--2--getTranslationX()=100.0  getTranslationY()=0.0
 dialog0--2--0--0--3--2--getTranslationX()=100.0  getTranslationY()=0.0
 dialog0--2--0--0--3--2--getScrollX()=0  getScrollY()=0
 -------------------------------------------
 dialog0--2--0--0--3--3--getGlobalVisibleRect(rect)>>Rect(480, 628 - 680, 828)
 dialog0--2--0--0--3--3--getGlobalVisibleRect(rect, point)>>Rect(480, 628 - 680, 828)point>>(480,628)
 dialog0--2--0--0--3--3--getLocalVisibleRect(rect)>>Rect(0, 0 - 200, 200)
 dialog0--2--0--0--3--3--getLocationInWindow(location)>>(480,628)
 dialog0--2--0--0--3--3--getLocationOnScreen(location)>>(500,1043)
 dialog0--2--0--0--3--3--getWindowVisibleDisplayFrame(rect)>>Rect(0, 50 - 1200, 1824)
 dialog0--2--0--0--3--3--getLeft()=200 getTop()=200 getRight()=400 getBottom()=400
 dialog0--2--0--0--3--3--getX()=200.0      getY()=200.0
 dialog0--2--0--0--3--3--getTranslationX()=0.0  getTranslationY()=0.0
 dialog0--2--0--0--3--3--getTranslationX()=0.0  getTranslationY()=0.0
 dialog0--2--0--0--3--3--getScrollX()=0  getScrollY()=0
 -------------------------------------------

当我们移动view3时,看出getLeft()系列的值没有改变,但是TranslationX系列的值发生了改变

 view3--getGlobalVisibleRect(rect)>>Rect(57, 1156 - 257, 1356)
 view3--getGlobalVisibleRect(rect, point)>>Rect(57, 1156 - 257, 1356)point>>(58,1156)
 view3--getLocalVisibleRect(rect)>>Rect(-1, 0 - 199, 200)
 view3--getLocationInWindow(location)>>(57,1156)
 view3--getLocationOnScreen(location)>>(57,1156)
 view3--getWindowVisibleDisplayFrame(rect)>>Rect(0, 50 - 1200, 1824)
 view3--getLeft()=1000 getTop()=20 getRight()=1200 getBottom()=220
 view3--getX()=57.0      getY()=978.0
 view3--getTranslationX()=-943.0  getTranslationY()=958.0
 view3--getTranslationX()=-943.0  getTranslationY()=958.0
 view3--getScrollX()=0  getScrollY()=0

来些扩展的看看Activity 的视图树(以下视图跟上面的布局没有关系)
AppCompatActivity_NO_ActionBar内容区.png
AppCompatActivity_NO_ActionBar内容区.png


AppCompatActivity_NO_ActionBar整个界面包含状态栏.png

AppCompatActivity_NO_ActionBar整个界面包含状态栏.png


AppCompatActivity_With_ActionBar内容区
AppCompatActivity_With_ActionBar内容区


AppCompatActivity_With_ActionBar内容区和ActionBar.png
AppCompatActivity_With_ActionBar内容区和ActionBar.png


AppCompatActivity_With_ActionBar整个界面包含状态栏
AppCompatActivity_With_ActionBar整个界面包含状态栏.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值