2011-11-07 10 views
1

ズーム後に倍率を決定する方法。私はピンチズームのために以下のコードを使用しています。ズーム後、正しい位置にビットマップで円を描く必要があります。私はこれを、ズーム後の正確な位置に描画するために使用しなければならない式を聞いた。アンドロイドの倍率を決定する方法

式:

float x = ev.getX()/mScaleFactor + rect.left; 
float y = ev.getY()/mScaleFactor + rect.top; 

私はmScaleFactorを計算する方法は考えています。

私は画像とズームを表示するIm​​ageViewのを使用してい

public boolean onTouch(View v, MotionEvent rawEvent) { 
    WrapMotionEvent event = WrapMotionEvent.wrap(rawEvent); 
    // ... 
    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 

}

、ピンチズームするためのコードの下に使用しています。 キャンバスとビットマップの使用私は描画後に円を描き、イメージビューに設定します。

上記ピンチズームコードの倍率を計算するにはどうすればよいですか?

ありがとうございます。

答えて

0

あなたはScaleGestureDetector.SimpleOnScaleGestureListenerクラスを使用fは、あなたがこのような何か行うことができます。

@Override 
public boolean onScaleBegin(ScaleGestureDetector detector){ 
    //the focal point before taking into account the zoom/translations/etc 
    float startX = detector.getFocusX(); 
    float startY = detector.getFocusY(); 

    initialPoints = new float[]{startX, startY}; 
    if(transformMatrix.invert(inverseTransformMatrix)) 
     inverseTransformMatrix.mapPoints(initialPoints); 
    //initialPoints now contain the correct points based on the current zoom 
} 
関連する問題