【问题标题】:coordinates after zoom in androidandroid放大后的坐标
【发布时间】:2011-10-26 18:18:30
【问题描述】:

我试图在缩放后画圆,但它没有画在正确的位置。没有缩放它工作正常。缩放后我们需要考虑任何因素吗?诸如比例因子之类的东西。 圆的半径也在增加。 即使在缩放之后我也需要正确绘制。

      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);

         }
     }

android放大后如何计算x、y坐标?以及缩放后的圆半径。 任何帮助,将不胜感激。

【问题讨论】:

    标签: android bitmap imageview zooming


    【解决方案1】:

    从你的代码中我不清楚你在做什么。但是您可以完全控制如何绘制圆圈。您可以根据给定的缩放级别缩放圆的半径并使用新的半径重新绘制圆,或者根据缩放级别缩放画布的矩阵。

    【讨论】:

    • 我已经更新了我的问题。我想在缩放后画一个圆圈。但是缩放后我无法在正确的点绘制。是否有任何公式可以在使用缩放级别缩放后计算 x、y 坐标?没有缩放,我可以在正确的点绘制。缩放后我不会在正确的点上绘制。请让我知道如何计算缩放后的 x 、 y 坐标以及圆的半径。
    • 现在我正在使用下面的行 pcanvas.setMatrix(matrix); 将矩阵设置为画布; .但有一些改进,但仍然存在问题。
    • 嗨,帕万,您找到解决方案了吗?请发布解决方案。谢谢
    【解决方案2】:

    如果您使用 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
    }
    

    【讨论】:

      猜你喜欢
      • 2020-06-02
      • 1970-01-01
      • 2015-11-24
      • 1970-01-01
      • 1970-01-01
      • 2014-10-24
      • 2019-12-07
      • 2019-03-11
      • 2016-11-11
      相关资源
      最近更新 更多