2017-03-06 5 views
0

カスタムImageViewをいくつかの機能で作成しましたが、私の問題は実装のフローです。今、ビューにはドラッグ&ズーム機能があります。ここ はonTouchListenerです:Android:カスタムビューのonTouchListenerで実装されています

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

私はリスナーに情事を検出し、スムーズな情事の後に行列を翻訳したいです。私の仕事のために働く解決策があれば、とても感謝しています。

答えて

1

あなたは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) { 

    } 
} 

あなたonTouch方法、[OK]を

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

をすることができますが、どのように私はXを設定する必要があり、YはonFling方法で表示する座標? – androidAnonDev

+0

event1.getY()とevent2.getY()はあなたにXとYの座標を与えます – sadat

+0

いいえ、私はイメージをスムーズに動かすことを意味します。 私の仕事はアンドロイドギャラリーのようにイメージビューを作成しています。 – androidAnonDev

関連する問題