2011-10-26 10 views
1

ズーム後に円を描こうとしていて、正しい場所に描画されていません。ズームアウトするとうまくいきます。ズーム後に何らかの要因を考慮する必要がありますか?スケールファクタのようなものもあります。 円の半径も増えています。 ズーム後も正しく描画する必要があります。ズームイン後の座標android

 public boolean onTouch(View v, MotionEvent rawEvent) { 
     WrapMotionEvent event = WrapMotionEvent.wrap(rawEvent); 
      ImageView view = (ImageView) v; 
     view.setScaleType(ImageView.ScaleType.MATRIX); 

      if (isZoomRequired == false) //draw circle when zoom is off. 
      { 
      x = (int) rawEvent.getX(); 
       y = (int) rawEvent.getY(); 
       r = SettingsActivity.brushsize; 

       pcanvas.drawCircle(x, y, r, mPaint); 
       layers[1] = new BitmapDrawable(bitmap); 
       LayerDrawable layerDrawable = new LayerDrawable(layers); 
      view.setImageDrawable(layerDrawable); 

      } 
      else //zoom when zoom is on or button selected      
      { 
      // 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); 
       scale = newDist/oldDist; 
       matrix.postScale(scale, scale, mid.x, mid.y); 
       } 
      } 
      break; 
     } 


     view.setImageMatrix(matrix); 

     } 
    } 

アンドロイドズーム後のx、y座標の計算方法は?ズーム後の円の半径も含む。 ご協力いただければ幸いです。

答えて

0

あなたのコードから、あなたがしていることを正確にはわかりません。しかし、あなたは円を描く方法を完全に制御することができます。指定したズームレベルに基づいて円の半径をスケーリングし、新しい半径で円を再描画するか、ズームレベルに基づいてキャンバスの行列をスケーリングすることができます。あなたはScaleGestureDetector.SimpleOnScaleGestureListenerクラスを使用する場合は

+0

私は私の質問を更新しました。私はズーム後に円を描こうとしています。しかし、ズーム後、私は正しいポイントで描画することができません。ズームレベルを使用してズーム後にx、y座標を計算する式はありますか?ズームアウトすると、私は正しいポイントで描画することができます。ズーム後、私は正しい位置に描画しません。円の半径とズーム後のx、y座標の計算方法を教えてください。 – pavan

+0

今、私は以下の行を使ってキャンバスに行列を設定しています。pcanvas.setMatrix(matrix); 。しかし、改善はありますが、それでもなお問題があります。 – pavan

+0

こんにちはPavanさんはthis.plsの解決策を見つけますか?ありがとう –

0

あなたはこのような何かを行うことができます。

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