0

画像ビューがあります。ズーム(ピンチズーム)した後、画像の端を取得する必要があります。つまり、画像を左または右にドラッグすると、最後のポイントに到達したときにイベントを発生させる必要があります(その後はドラッグできません)。私はこのようなズームを使用しました。

 public boolean onTouch(View v, MotionEvent event) {
  ImageView view = (ImageView) v;

  // Dump touch event to log
  dumpEvent(event);

  // Handle touch events here...
  switch (event.getAction() & MotionEvent.ACTION_MASK) {
  case MotionEvent.ACTION_DOWN:
     savedMatrix.set(matrix);
     start.set(event.getX(), event.getY());
     Log.d(TAG, "mode=DRAG");
     mode = DRAG;
     break;
  case MotionEvent.ACTION_POINTER_DOWN:
     oldDist = spacing(event);
     Log.d(TAG, "oldDist=" + oldDist);
     if (oldDist > 10f) {
        savedMatrix.set(matrix);
        midPoint(mid, event);
        mode = ZOOM;
        Log.d(TAG, "mode=ZOOM");
     }
     break;
  case MotionEvent.ACTION_UP:
  case MotionEvent.ACTION_POINTER_UP:
     mode = NONE;
     Log.d(TAG, "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);
        Log.d(TAG, "newDist=" + newDist);
        if (newDist > 10f) {
           matrix.set(savedMatrix);
           float scale = newDist / oldDist;
           matrix.postScale(scale, scale, mid.x, mid.y);
        }
     }
     break;
  }

  view.setImageMatrix(matrix);
  return true; // indicate event was handled
  }
4

1 に答える 1

0

最初に画像をレコードにロードするときImageView、左上隅または中央のいずれかの参照点を指定します(x, y)。画像をドラッグまたはズームするたびに、その参照点に関する変更が更新されます。つまり、画像のaピクセルをx軸にドラッグし、bピクセルを軸にドラッグするとy、新しい基準点が になります(x + a, y + b)

詳細については、このリンクを確認してください。そしてこれも。

于 2012-04-30T13:08:22.850 に答える