簡體   English   中英

view.getHitRect(rect)不起作用

[英]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() 這些將為您提供所需的絕對位置。

看到:

我怎么知道MotionEvent是相對的還是絕對的?

您還必須調整目標視圖的位置,以便考慮其他視圖的任何位移,如下所示:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM