2011-10-26 3 views
1

확대/축소 후 원을 그리려하고 올바른 위치에 그려지지 않았습니다. 밖으로 줌으로 잘 작동합니다. 확대/축소 후에 어떤 요인을 고려해야합니까? 어떤 것은 스케일 인수와 같습니다. 원의 반경도 증가합니다. 확대/축소 후에도 올바르게 그릴 필요가 있습니다.확대/축소 후 안드로이드 좌표

 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 
}