координаты после увеличения в Android - PullRequest
1 голос
/ 26 октября 2011

Я пытаюсь нарисовать круг после увеличения, и он не нарисован в правильном месте. С зумом работает нормально. Нужно ли учитывать какие-либо факторы после увеличения? Что-то вроде масштабного коэффициента. Радиус круга также увеличивается. Мне нужно правильно рисовать даже после увеличения.

      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 после увеличения в Android? а также радиус круга после увеличения. Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 23 сентября 2013

Если вы используете класс ScaleGestureDetector.SimpleOnScaleGestureListener, вы можете сделать что-то вроде этого:

@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
}
0 голосов
/ 26 октября 2011

Мне не понятно из вашего кода, что именно вы делаете.Но у вас есть полный контроль над тем, как вы рисуете круг.Вы можете масштабировать радиус круга на основе заданного уровня масштабирования и перерисовывать круг с новым радиусом или масштабировать матрицу холста на основе уровня масштабирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...