本文主要大体讲下getHitRect()、getDrawingRect()、getLocalVisibleRect()、getGlobalVisibleRect、
getLocationOnScreen、getLocationWindow方法的作用。
getHitRect()
android sdk文档中给出的解释是:Hit rectangle in parent's coordinates.看字面的意思应该是将矩形映射为父视图中的坐标,看起来还不是非常的清楚,下面就拿一个具体的示例来说明。
代码样式如下
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="450px"
android:layout_height="450px"
android:orientation="vertical"
android:layout_gravity="center_horizontal"
android:background="@android:color/holo_red_light">
<TextView
android:layout_width="200px"
android:layout_height="200px"
android:layout_marginTop="100px"
android:layout_gravity="center_horizontal"
android:text="测试区域"
android:gravity="center"
android:textStyle="bold"
android:background="@android:color/holo_blue_bright"/>
</LinearLayout>
public class MainActivity extends Activity {
private View testView;
private final static String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
testView = findViewById(R.id.testView);
testView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
testView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
Rect rect = new Rect();
testView.getHitRect(rect);
Log.i(TAG, "--left: " + rect.left + "--top: " + rect.top + "--right: " + rect.right + "--bottom: " + rect.bottom);
}
});
}
在模拟器显示样式如下:
打印的结果:
07-27 16:03:00.017 9540-9540/? I/MainActivity﹕ --left: 125--top: 100--right: 325--bottom: 300
getDrawingRect()
下面测试getDrawingRect()方法,先看布局文件如下:
<FrameLayout 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"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="400px"
android:layout_height="400px"
android:layout_gravity="center"
android:background="@android:color/holo_blue_dark"
a