我们重点在获取view的y坐标,你懂的...

依次介绍以下四个方法:

 

1.getLocationInWindow

 

  1. int[] position = new int[2]; 

  2. textview.getLocationInWindow(position); 

  3. System.out.println("getLocationInWindow:" + position[0] + "," + position[1]); 

这个方法是将view的左上角坐标存入数组中.此坐标是相对当前activity而言.

若是普通activity,则y坐标为可见的状态栏高度+可见的标题栏高度+view左上角到标题栏底部的距离.

可见的意思是:在隐藏了状态栏/标题栏的情况下,它们的高度以0计算.

若是对话框式的activity,则y坐标为可见的标题栏高度+view到标题栏底部的距离.

此时是无视状态栏的有无的.

 

2.getLocationOnScreen

 

  1. int[] position = new int[2]; 

  2. textview.getLocationOnScreen(position); 

  3. System.out.println("getLocationOnScreen:" + position[0] + "," + position[1]); 

这个方法跟上面的差不多,也是将view的左上角坐标存入数组中.但此坐标是相对整个屏幕而言.

 

y坐标为view左上角到屏幕顶部的距离.

 

 

3.getGlobalVisibleRect

 

  1. Rect viewRect = new Rect(); 

  2. textview.getGlobalVisibleRect(viewRect); 

  3. System.out.println(viewRect); 

这个方法是构建一个Rect用来"套"这个view.此Rect的坐标是相对当前activity而言.

若是普通activity,则Rect的top为可见的状态栏高度+可见的标题栏高度+Rect左上角到标题栏底部的距离.

若是对话框式的activity,则y坐标为Rect的top为可见的标题栏高度+Rect左上角到标题栏底部的距离.

此时是无视状态栏的有无的.

 

4.getLocalVisibleRect

 

  1. Rect globeRect = new Rect(); 

  2. button.getLocalVisibleRect(globeRect); 



注意:

以上方法在OnCreate方法中调用,都会返回0,这是因为View还未加载完毕.

建议在onWindowFocusChanged方法中进行获取,有些情况下onWindowFocusChanged不好用的时候(比如ActivityGroup),可以这样写:

 

  1. mTextView.post(new Runnable() { 

  2.     @Override 

  3.     public void run() { 

  4.         Rect viewRect = new Rect(); 

  5.         mTextView.getLocalVisibleRect(viewRect); 

  6.         mTreeScrollView.setRect(viewRect); 

  7.     } 

  8. }); 

这样在View加载完毕之后会执行获取位置的方法.

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


PS:如何动态创建一个View类控件:

    1、通过new方法来创建一个界面对象;

    2、通过Layout xml资源来创建,利用LayoutInflater提供的方法。


获取view相对于父parent的相对位置通过getLeft , getTop, getBottom, getRight 获得。

  1. getLocalVisibleRect
  2. getGlobalVisibleRect
  3. getLocationOnScreen
  4. getLocationInWindow

更多相关文章

  1. Android(安卓)— 自定义圆形 ImageView 控件
  2. android自由改变Dialog窗口位置的方法
  3. Android(安卓)JUnit单元测试基础实例
  4. android中保存Bitmap图片到指定文件夹中的方法
  5. 面试篇--android下网络通讯机制(三种网络通讯方式)
  6. Android(安卓)N NotificationManagerService源码分析
  7. SystemClock.sleep和Thread.sleep源码分析
  8. Android使用Jsoup解析Html表格的方法
  9. Android(安卓)Studio Gradle 重命名输出App或者Library的文件名

随机推荐

  1. Android(安卓)Permission大全
  2. 在android中显示网络图片及查看页面源代
  3. 如何正确获得Android内外SD卡路径
  4. Android混合开发
  5. android中的四种启动模式launchMode
  6. Android(安卓)9.0 网络权限的问题以及and
  7. Android(安卓)Touch事件传递机制具体解释
  8. Android中图像变换Matrix的原理、代码验
  9. Android(安卓)Studio一些控件的使用
  10. Android(安卓)Intent 大全