我想调用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);
但它崩溃了!请帮忙!我认为这对某些人来说非常容易。他们不在乎:(
你真的不应该打电话给onTouch()
。这是 Android 系统在发生触摸事件时生成的内容,而不是您应该手动调用的内容。如果不出意外,您将如何计算出通过它MotionEvent
您需要做的是在出现触摸事件时调用onTouch()
方法调用的任何方法。重构onTouch()
,使其调用具有适当参数的方法,该方法在发生触摸事件时行为适当;然后让你的onOptionsItemSelected()
也调用该方法。
虽然你不应该调用由操作系统本身调用的Android View的内部方法。但是,您仍然可以通过简单地在子类上创建一个实例并通过此对象调用 onTouch 方法来执行此操作。检查下面的代码:
SubClass sub_class = new SubClass();
sub_class.onTouch(v, event);