我想请拨打onTouch()
方法,该方法与我想要调用的方法onOptionsItemSelected()
不同,这里是代码:
public boolean onTouch(View v, MotionEvent event) {
float downx = 0, downy = 0, upx = 0, upy = 0;
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
downx = event.getX();
downy = event.getY();
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
upx = event.getX();
upy = event.getY();
mCanvas.drawLine(downx, downy, upx, upy, mPaint);
invalidate();
break;
case MotionEvent.ACTION_CANCEL:
break;
default:
break;
}
return true;
}
我想通过以下方式调用onTouch()
的方法:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.LINE_ID:
//i want to call it here
return true;
onOptionsItemSelected()
位于MainClass
但onTouch()
位于MainClass
的子类中。
我怎么能这样做?我怎么能调用drawLine()?
更新:
我试过了:
View v = null; MotionEvent event = null;
MyView sub_class = new MyView(getBaseContext());
sub_class.onTouch(v, event);
但它已经崩溃了! 请帮忙!我觉得这对一些人很容易..他们不在乎:(
答案 0 :(得分:1)
你根本不应该打电话给onTouch()
。这是Android系统在触摸事件时生成的内容,而不是您应该手动调用的内容。如果没有别的,你会如何找出MotionEvent
传递它的内容?
您需要做的是调用触摸事件进入时onTouch()
方法调用的任何方法。重构您的onTouch()
,使其调用具有适当参数的方法,该方法在适当时运行发生触摸事件;然后让onOptionsItemSelected()
调用该方法。
答案 1 :(得分:0)
虽然您不应该调用由Android本身调用的Android View的内部方法。 但是,您仍然可以通过在子类上创建实例并通过此对象调用onTouch方法来实现此目的。 检查以下代码:
SubClass sub_class = new SubClass();
sub_class.onTouch(v, event);