2013-02-21 34 views
0

在我的應用程序中,我想獲得touchevent的位置。但是當我點擊按鈕之後,我想調用ontouchevent和onDraw()方法並獲取位置。 我該怎麼辦呢?請幫我在android中的paint touchevent

public void getPos(View v){ 
     //here i want to call onTouchEvent method.. 
    } 

    @Override 
public boolean onTouchEvent(MotionEvent event) { 

    if(event.getAction()==MotionEvent.ACTION_UP) { 

     Log.d("position", event.getX() + "-" + event.getY()); 
     return true; 
    } 
return false; 
} 
+0

我說得對嗎,在按鈕的xml中有一個android:onClick =「getPos」? – Ridcully 2013-02-21 12:43:07

+0

yes.but我怎樣才能調用onTouchEvent和onDraw方法在那個按鈕上點擊? – 2013-02-21 12:48:42

+0

請參閱下面的答案。 – Ridcully 2013-02-21 13:03:04

回答

1

你不要自己調用這些方法。所有名爲on...的方法都是在某些事件發生時由Android系統調用的回調方法。在你的情況下,這個方法(在Activity中定義)在有其他地方沒有處理的觸摸事件時被調用。 觸摸按鈕是由按鈕處理的,因此不調用Activity的onTouchEvent。

你可以做什麼,是一個onTouchEventListener添加到您的按鈕:在您的onCreate()方法(另一個在beeing創建acitity的情況下,由Android調用的方法)

所以,找到你的按鈕,並添加監聽器像這樣:

View button = findViewById(R.id.your_button_id); 
button.setOnTouchListener(new OnTouchListener() { 
    onTouch(View v, MotionEvent event) { 
     if(event.getAction()==MotionEvent.ACTION_UP) { 
      Log.d("position", event.getX() + "-" + event.getY()); 
     } 
     return false; 
    } 
} 

請注意,我總是返回false,以免干擾按鈕。如果你返回true,這個事件將被「吃掉」,而不是被視爲已經被視圖處理。所以你可以隨意調整它。 Btw。如您所見,您可以將OnTouchListener附加到任何視圖,因此您可能根本不需要實際的按鈕。

+0

?我認爲它會給按鈕位置。因爲在點擊按鈕之後點擊稱爲 – 2013-02-21 13:04:56

+0

它給出觸摸事件在屏幕上的位置,因爲這是event.x和event.y包含什麼。你爲什麼不簡單地嘗試它? – Ridcully 2013-02-21 13:29:49

+0

其工作..thanku這麼多..之後,我想在該位置上繪製圓圈,將有可能? – 2013-02-21 14:00:58

0

手動調用的onTouchEvent不會做你任何好處,因爲的onTouchEvent是由Android使用的回調方法來拯救你觸摸事件(你不能叫它並期望它可以爲您準備好觸摸數據)

取而代之的是您可以跟蹤您的觸摸事件,以及何時調用getPos來讀取您最新的觸摸事件數據。你的代碼應該是這樣的:

private float lastX = -1; 
private float lastY = -1; 

public void getPos(View v){ 
    //here i want to call onTouchEvent method.. 
    if (lastX == -1 || lastY == -1) { 
     // no touch events 
     return; 
    } 
    // do whatever you want with the x,y values 
    //reset them for the next check 
    lastX = -1; 
    lastY = -1; 
} 

    @Override 
public boolean onTouchEvent(MotionEvent event) { 

    if(event.getAction()==MotionEvent.ACTION_UP) { 
     lastX = event.getX(); 
     lastY = event.getY(); 
     Log.d("position", event.getX() + "-" + event.getY()); 
     return true; 
    } 
    return false; 
    } 
+0

它沒有工作。沒有進入onTouchEvent .. – 2013-02-21 13:03:02

+0

你註冊觸摸事件聽嗎? View.setOnTouchListener(this); ? – 2013-02-21 13:05:48

+0

沒有。我應該在哪裏寫這個? – 2013-02-21 13:08:21