0

私のアプリケーションでは、touchevent の位置を取得したいのですが、その後ボタンをクリックすると、ontouchevent と onDraw() メソッドを呼び出して位置を取得したいと考えています。どうすればこれを行うことができますか?助けてください

   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;
}
4

2 に答える 2

1

これらのメソッドを自分で呼び出すことはありません。名前が付けられたすべてのメソッドon...は、特定のイベントが発生したときにAndroidシステムによって呼び出されるコールバックメソッドです。あなたの場合、このメソッド(アクティビティで定義)は、他の場所で処理されないタッチイベントがあるときに呼び出されます。ボタンへのタッチはボタンによって処理されるため、アクティビティのonTouchEventは呼び出されません。

あなたができることは、あなたのボタンにonTouchEventListenerを追加することです:

したがって、onCreate()メソッド(アクティビティビーイングが作成されたときに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と、イベントは「食べ尽くされ」、ビューによって処理されるように渡されなくなります。したがって、これを自由に調整できます。ところで。ご覧のとおり、OnTouchListenerを任意のビューにアタッチできるため、実際のボタンはまったく必要ありません。

于 2013-02-21T13:02:08.680 に答える
0

onTouchEvent は Android がタッチ イベントを配信するために使用するコールバック メソッドであるため、手動で onTouchEvent を呼び出しも効果はありません (呼び出して、タッチ データの準備ができていることを期待することはできません)。

代わりにできることは、タッチ イベントを追跡し、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;
  }
于 2013-02-21T12:48:29.810 に答える