2013-08-01 3 views
0

Je souhaite appeler startactivity pour le résultat lorsqu'un point de vue unique est détecté.StartActivitypour afficher le résultat personnalisé

Pour SingleTap sur la vue, je l'ai écrit la condition follwing dans la méthode OnTouch de la vue

@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; 
} 

et la méthode taraudé MainActivity est comme suit

static void tapped(Activity activity, int requestCode){ 

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

mais cela ne fonctionne pas comme il forclos avec l'erreur de pointeur null d'erreur.

S'il vous plaît suggérer quel est le problème avec mon code.

Répondre

0

Le code final qui a travaillé est j'ai ajouté this.getcontext() à mon avis,

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

et de l'activité comme suit

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); 

Vous passez en null pour l'activité. Ainsi, la fonction tapped essaie d'appeler startActivityForResult et échoue car elle est nulle.

+0

ouais je viens de remarquer que, mais qu'est-ce que J'utilise là.je dois appeler l'activité mais, je suis confus. –

+0

Faites-en un contexte plutôt qu'une activité et utilisez this.getContext() dans la vue. –

+0

Oh merci, ça a marché. –