getHitRect获取点击控件的位置
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());