getHitRect获取点击控件的位置

时间:2023-03-08 20:11:17

public  void getHitRect(Rect outRect)                  
Added in API level 1
Hit rectangle in parent's coordinates:找到控件占据的矩形区域的矩形坐标
Parameters
outRect: The hit rectangle of the view:控件占据的矩形区域

测试代码如下,根据代码可以很直观的知道这个函数的用法:
package com.sean.gethitrecttest;

import android.app.Activity;
import android.graphics.Rect;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {

private TextView mTextView;
    private Button mButton;
    Rect Trect = new Rect();
    Rect Brect = new Rect();

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

mTextView = (TextView) this.findViewById(R.id.TextView01);
        mButton = (Button) this.findViewById(R.id.Button01);
        mButton.setOnClickListener(new OnClickListener() {

@Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

mTextView.getHitRect(Trect);
                mButton.getHitRect(Brect);
                Log.d("Lichking",
                        "---------TextView_left-------"
                                + String.valueOf(Trect.left));
                Log.d("Lichking",
                        "---------TextView_top-------"
                                + String.valueOf(Trect.top));
                Log.d("Lichking",
                        "---------TextView_right-------"
                                + String.valueOf(Trect.right));
                Log.d("Lichking",
                        "---------TextView_bottom-------"
                                + String.valueOf(Trect.bottom));

Log.d("Lichking",
                        "---------Button_left-------"
                                + String.valueOf(Brect.left));
                Log.d("Lichking",
                        "---------Button_top-------"
                                + String.valueOf(Brect.top));
                Log.d("Lichking",
                        "---------Button_right-------"
                                + String.valueOf(Brect.right));
                Log.d("Lichking",
                        "---------Button_bottom-------"
                                + String.valueOf(Brect.bottom));

}
        });

}
}
布局图如下:只有居中的线性排列的一个TextView和一个Button

使用mTextView.getHitRect      (TRect)和mButton.getHitRect(BRect)调用这个函数之后,Trect和Brect就指图中的紫色和灰色矩形对象。
查看log如下:

从中我们知道了紫色TextView所占据矩形的第二象限顶点和第四象限顶点坐标为(247,373)和(293,405)
灰色Button所占据矩形的第二象限顶点和第四象限顶点坐标为(222,405)和(318,477)。

一个应用:判断是否点击到该控件上
boolean isHit = Trect.contains((int)event.getX(), (int)event.getY());