2013-08-01 6 views
0

단일 시야가 발견되면 결과에 대한 startactivity를 호출하려고합니다. 보기에 singletap를 들어 StartActivityfor 사용자 정의보기에서

, 내가

static void tapped(Activity activity, int requestCode){ 

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

을 다음과 같다하지만이 같은 작동하지 않는 뷰

@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 방법에 follwing을 조건을 썼다 오류 널 포인터 예외로 인해 차압이 발생합니다.

제 코드가 잘못되었음을 제안하십시오.

답변

0

마지막 코드는

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이 전달됩니다. 따라서 탭된 함수는 startActivityForResult를 호출하려고 시도하고 해당 null 때문에 실패합니다. 다음과 같은 일을

+0

그래 난 그냥 눈치

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

및 활동에서 내가보기에 this.getcontext()를 추가 입니다,하지만 무엇 나는 그때 거기에서 사용한다. 나는 활동을 호출 할 필요가있다. 그러나 나는 혼란 스럽다. –

+0

활동 대신 컨텍스트로 만들고 뷰에서 this.getContext()를 사용하십시오. –

+0

오 고마워요. –

관련 문제