1.首先是item的view没有处理这个down事件,只好ListView来处理,接着的up事件必然也会由ListView来处理。
2.如果是一个tap动作,即点击,那么处理up事件时就会去调用OnItemClickListener,在AdapterView#performItemClick(View view, int position, long id)中调用。
那么怎么根据event.getX/Y确定这个tap属于哪个postion呢。通过以下代码
public int pointToPosition(int x, int y) {//x,y为event.getX/Y
Rect frame = mTouchFrame;
if (frame == null) {
mTouchFrame = new Rect();
frame = mTouchFrame;
}
final int count = getChildCount();
for (int i = count - 1; i >= 0; i--) {
final View child = getChildAt(i);
if (child.getVisibility() == View.VISIBLE) {
child.getHitRect(frame);//获取child在父View坐标系中的四点坐标
if (frame.contains(x, y)) {
return mFirstPosition + i;
}
}
}
return INV