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 系统调用的回调方法。在您的情况下,当存在未在其他地方处理的触摸事件时,将调用此方法(在 Activity 中定义)。触摸按钮按钮处理,因此不会调用 Activity 的 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不干扰按钮。如果您 return true,该事件将被“吃掉”并且不再传递给视图处理。所以你可以随意调整它。顺便提一句。如您所见,您可以将 OnTouchListener 附加到任何视图,因此您可能根本不需要实际的按钮。

于 2013-02-21T13:02:08.680 回答
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;
  }
于 2013-02-21T12:48:29.810 回答