2014-05-21 179 views
0

我曾經有一個onTouchListener,但我需要將其更改爲onClickListener,因爲我不想長時間觸摸來記錄與短觸摸不同的值。在我的一行代碼中,我有X[i]=Integer.valueOf((int)event.getX());,與onTouchListener完美配合,但是onClickListener的錯誤是event cannot be resolved獲取X和Y座標onClick

我的問題是,是否有event.getX()函數爲onClickListener

這裏是我的代碼部分:提前

touchLayout.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      X[i]=Integer.valueOf((int)event.getX()); 
     } 
    }); 
} 

感謝

回答

2

你可能應該看看這個,這可以幫助你:

@Override 
    public boolean onTouchEvent(MotionEvent event) { 
     int x = (int)event.getX(); 
     int y = (int)event.getY(); 
     switch (event.getAction()) { 

      case MotionEvent.ACTION_MOVE: 
       Log.i("222","X-"+x+"===Y="+y); 

     } 
    return false; 
    } 
0

你可以試試這個

 public void onClick(View view) { 
     int[] values = new int[2]; 
     view.getLocationOnScreen(values); 
     Log.d("X & Y",values[0]+" "+values[1]); 
    } 

在方法

 getLocationOnScreen(values); 

你可以做任何你want.If它不工作你的情況,請讓我知道

+0

這是有效的,但由於某些原因,這些值不等於onTouch中的X和Y ... – AsfK

+1

這是因爲View中「getLocationOnScreen」方法返回的值是最左上角的點,而不是點該觀點實際上觸及了。 – Marche101

7

我敢肯定你不能點擊x和y COORDS因爲onClick函數由視圖的觸摸監聽器的內部實現觸發的事件。當用戶舉起手指並且沒有移動超過一定距離(稱爲觸摸斜坡)時觸發。

另一方面,如果您實現自己的觸摸偵聽器,則可以檢測觸摸手勢開始和結束的位置,並根據這些座標執行任何您需要的操作。它看起來像這樣:

view.setOnTouchListener(new View.OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 
      if (event.getAction() == MotionEvent.ACTION_DOWN) { 
       startX = (int) event.getX(); 
       startY = (int) event.getY(); 
      } 

      if (event.getAction() == MotionEvent.ACTION_UP) { 
       int endX = (int) event.getX(); 
       int endY = (int) event.getY(); 
       int dX = Math.abs(endX - startX); 
       int dY = Math.abs(endY - startY); 


       if (Math.sqrt(Math.pow(dX, 2) + Math.pow(dY, 2)) <= touchSlop) { 
        // Your on click logic here... 
       } 
      } 
     return true; 
    } 
}); 

touchSlop變量在這裏保存你在手勢被認爲滾動之前可以移動多少。您可以通過調用ViewConfiguration.get(context).getScaledTouchSlop()來獲取此值。

+0

這個完美的作品,謝謝 –

+0

返回true; shuld在下面//你的點擊邏輯在這裏... 但是在方法結束時你應該返回false。 – Sirelon