[英]view.getHitRect(rect) not working
為了允許水平滾動,我重寫onInterceptTouch(MotionEvent)
。 然而,我發現我無法檢測用戶何時觸摸嵌入的v。視圖上的x,y類似於MotionEvent.getX(),getY()
,而MotionEvent.getX(),getY()
類似於400,500
View v = findViewById(R.id.myView);
Rect r = new Rect();
v.getHitRect(r);
int[] loc = new int[2];
v.gtLocationOnScreen(loc);
int x = loc[0];
int y = loc[1];
// Result x,y are huge numbers 2400, etc
// event.getX() is 30, event.getY() == 500 nothing close to 2400.
if (r.contains((int)event.getX(), (int)event.getY())
{
return false; // this is never true even when I click right on View v.
}
我知道這是一個老問題,主要是在鏈接帖子中回答,但我剛遇到這個問題,所以我想我會填寫我的解決方案。
private boolean isTouchInView(View view, MotionEvent event) {
Rect hitBox = new Rect();
view.getGlobalVisibleRect(hitBox);
return hitBox.contains((int) event.getRawX(), (int) event.getRawY());
}
嘗試使用getRawX()
和getRawY()
。 這些將為您提供所需的絕對位置。
看到:
您還必須調整目標視圖的位置,以便考慮其他視圖的任何位移,如下所示:
int[] screenLocation = new int[2];
view.getLocationOnScreen(screenLocation);
hitRect.offset(screenLocation[0] - view.getLeft(), screenLocation[1] - view.getTop());
//Then check if source view is contained in target view
x=event.getRawX();
y=event.getRawY();
if (hitRect.contains(x, y)) {
//do your stuff
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.