2017-03-06 1 views
0

Ich erstelle benutzerdefinierte ImageView mit einigen Funktionen und mein Problem ist die Umsetzung fling. Die aktuelle Ansicht hat Funktionen zum Ziehen und Zoomen. Hier ist onTouchListener:Android: Implementierung fling in onTouchListener der benutzerdefinierten Ansicht

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    switch (event.getAction() & MotionEvent.ACTION_MASK) { 
     case MotionEvent.ACTION_DOWN: 
      savedMatrix.set(matrix); 
      start.set(event.getX(), event.getY()); 
      mode = DRAG; 
      break; 
     case MotionEvent.ACTION_POINTER_DOWN: 
      oldDist = spacing(event); 
      if (oldDist > 10f) { 
       savedMatrix.set(matrix); 
       midPoint(mid, event); 
       mode = ZOOM; 
      } 
      break; 
     case MotionEvent.ACTION_UP: 
      float[] values = new float[9]; 
      matrix.getValues(values); 
     case MotionEvent.ACTION_POINTER_UP: 
      mode = NONE; 
      break; 
     case MotionEvent.ACTION_MOVE: 
      if (mode == DRAG) { 
       matrix.set(savedMatrix); 
       matrix.postTranslate((event.getX() - start.x), 
         (event.getY() - start.y)); 
      } else if (mode == ZOOM) { 
       float newDist = spacing(event); 
       if (newDist > 10f) { 
        matrix.set(savedMatrix); 
        float scale = newDist/oldDist; 
        //SOME CODE 
       } 
      } 
      break; 
    } 
    invalidate(); 
    return true; 
} 

I fling in Zuhörer erkennen wollen und glatt Matrix nach fling übersetzen. Ich wäre sehr dankbar, wenn es eine funktionierende Lösung für meine Aufgabe gäbe.

Antwort

1

Sie können GestureDetector,

class MyGestureListener implements GestureDetector.OnGestureListener { 

    @Override 
    public boolean onFling(MotionEvent event1, MotionEvent event2, 
          float velocityX, float velocityY) { 
     if (event1.getY() - event2.getY() > SWIPE_MIN_DISTANCE && Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) { 
      return true; 
     } else if (event2.getY() - event1.getY() > SWIPE_MIN_DISTANCE && Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) { 
      return true; 
     } 
     return true; 
    } 

    @Override 
    public boolean onDown(MotionEvent event) { 
     return true; 
    } 

    @Override 
    public void onShowPress(MotionEvent motionEvent) { 

    } 

    @Override 
    public boolean onSingleTapUp(MotionEvent motionEvent) { 
     return false; 
    } 

    @Override 
    public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) { 
     return false; 
    } 

    @Override 
    public void onLongPress(MotionEvent motionEvent) { 

    } 
} 

Ihre OnTouch Methode,

@Override 
public boolean onTouch(View view, MotionEvent motionEvent) { 
    return new GestureDetectorCompat(getActivity(), new MyGestureListener()).onTouchEvent(motionEvent); 
} 
+0

Ok, aber wie ich X gesetzt ist, Y in onFling Methode anzuzeigen Koordinaten? – androidAnonDev

+0

event1.getY() und event2.getY() geben Ihnen X- und Y-Koordinaten – sadat

+0

Nein, ich meine glatt Bewegung des Bildes, nachdem wir es schleudern. Meine Aufgabe ist das Erstellen einer Bildansicht wie in Android-Galerie. – androidAnonDev

Verwandte Themen