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