在android中绘制触摸事件

时间:2013-02-21 12:19:42

标签: android ontouchevent buttonclick

在我的应用程序中,我想获得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;
}

2 个答案:

答案 0 :(得分:1)

您不要自己调用这些方法。名为on...的所有方法都是在某些事件发生时由Android系统调用的回调方法。在您的情况下,当有一个未在其他地方处理的触摸事件时,将调用此方法(在“活动”中定义)。 触摸按钮按钮处理,因此不会调用Activity的onTouchEvent。

您可以做的是在按钮上添加onTouchEventListener:

所以在你的onCreate()方法中(在创建了acitity beeing的情况下由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附加到任何视图,因此您可能根本不需要实际的按钮。

答案 1 :(得分: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;
  }