2013-08-01 80 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

哦,謝謝你,這很有效。 –