放大后如何绘制一个圆圈

我正在使用图像视图并使用layerDrawable绘制叠加图像.
我已经使用了两个位图原始和myBitmap.
放大后,我不能在正确的位置绘制圆,它被绘制在不同的位置.

这是我使用的代码,

ImageView view = (ImageView) findViewById(R.id.imageView);
    view.setonTouchListener(this);

    Options options = new BitmapFactory.Options();
    options.inScaled = false;
    original = BitmapFactory.decodeResource(getResources(),R.drawable.mainscreen,options); 
    original= getResizedBitmap(original,width,200);
    myBitmap = func(original);

    Resources r = getResources();
    layers = new Drawable[2];
    layers[0] = new BitmapDrawable(original);
    layers[1] = new BitmapDrawable(myBitmap);
    LayerDrawable layerDrawable = new LayerDrawable(layers);
    view.setimageDrawable(layerDrawable);

    bitmap =  Bitmap.createBitmap(width,200,Config.ARGB_8888);
    pcanvas = new Canvas();
    pcanvas.setBitmap(bitmap);  
    pcanvas.drawBitmap(grayScale,null);


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

      // Dump touch event to log
     // dumpEvent(event);
      if (isZoomrequired == false)
      {
          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
      {
      // 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
   }

请帮助我放大后,我需要在正确的位置绘制圆形.

任何帮助将不胜感激.

解决方法

你可以添加显示你想要获得什么的图像,还有一个图片显示你所得到的?

要记住的一件事是,某些操作对于y轴使用不同的零点.我一直在对Surfaceview进行矩阵运算,在这里我不得不计算一个校正因子,因为一个操作将视图的顶部用作y = 0,矩阵运算用作视图的底部为y = 0,所以实际的矩阵运算需要类似于:matrixY =(totalHeightY – Yposition).

显示您期望的和您获得的将有助于诊断问题比运行和通过您的代码更快地运行:)

相关文章

这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识...
本篇内容主要讲解“Android如何开发MQTT协议的模型及通信”,...
本文小编为大家详细介绍“Android数据压缩的方法是什么”,内...