2013-08-01 63 views
0

我想在检测到单个视图时调用结果的startactivity。StartActivityfor自定义视图中的结果

有关视图singletap,我写的follwing条件在视图

@Override public boolean onTouchEvent(MotionEvent ev) { 


if (!mSupportsZoom && !mSupportsPan) return false; 


mScaleDetector.onTouchEvent(ev); 

final int action = ev.getAction(); 
switch (action & MotionEvent.ACTION_MASK) { 
case MotionEvent.ACTION_DOWN: { 
    final float x = ev.getX(); 
    final float y = ev.getY(); 

    mLastTouchX = x; 
    mLastTouchY = y; 
    mActivePointerId = ev.getPointerId(0); 

    break; 
} 

case MotionEvent.ACTION_MOVE: { 
    final int pointerIndex = ev.findPointerIndex(mActivePointerId); 
    final float x = ev.getX(pointerIndex); 
    final float y = ev.getY(pointerIndex); 

    if (mSupportsPan && !mScaleDetector.isInProgress()) { 
     final float dx = x - mLastTouchX; 
     final float dy = y - mLastTouchY; 

     mPosX += dx; 
     mPosY += dy; 
     //mFocusX = mPosX; 
     //mFocusY = mPosY; 

     invalidate(); 
    } 

    mLastTouchX = x; 
    mLastTouchY = y; 

    break; 
} 

case MotionEvent.ACTION_UP: { 

    final float x = ev.getX(); 
    final float y = ev.getY(); 

    touchupX=x; 
    touchupY=y; 

    if(mLastTouchX == touchupX && mLastTouchY == touchupY){ //this is my condition to detect single tap on the view 

     PinchZoomPanActivity2.tapped(null, 100); //method for startactivityfor result which is in main activity 

    } 

    mActivePointerId = INVALID_POINTER_ID; 
    break; 
} 

case MotionEvent.ACTION_CANCEL: { 
    mActivePointerId = INVALID_POINTER_ID; 
    break; 
} 

case MotionEvent.ACTION_POINTER_UP: { 
    final int pointerIndex = (ev.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) 
      >> MotionEvent.ACTION_POINTER_INDEX_SHIFT; 
    final int pointerId = ev.getPointerId(pointerIndex); 
    if (pointerId == mActivePointerId) { 

     final int newPointerIndex = pointerIndex == 0 ? 1 : 0; 
     mLastTouchX = ev.getX(newPointerIndex); 
     mLastTouchY = ev.getY(newPointerIndex); 
     mActivePointerId = ev.getPointerId(newPointerIndex); 
    } 
    break; 
} 
} 

return true; 
} 

和mainactivity抽头方法的ontouch方法如下

static void tapped(Activity activity, int requestCode){ 

activity.startActivityForResult(new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI), 1); 
} 

但这并不作为工作它会抛出错误空指针异常。

请建议我的代码有什么问题。

回答

0

其工作的最终代码是 我在视图中添加this.getcontext(),

PinchZoomPanActivity2.tapped(this.getContext(), 100); 

和活动如下

static void tapped(Context context, int requestCode){ 

((Activity) context).startActivityForResult(new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI), 1); 
} 
2
PinchZoomPanActivity2.tapped(null, 100); 

您正在传递null作为活动。所以tapped函数会尝试调用startActivityForResult并失败,因为它的null。

+0

是啊,我刚才注意到,但后来做了什么我在那里使用,我需要打电话给我,但我很困惑。 –

+0

使其成为上下文而不是活动,并在视图上使用this.getContext()。 –

+0

哦,谢谢你,这很有效。 –