【问题标题】:How to magnify touch point of bitmap in android?如何在android中放大位图的触摸点?
【发布时间】:2015-05-03 20:28:53
【问题描述】:

我正在尝试在我的 android 应用程序中实现放大镜。在触摸位图时,它应该缩放到某个比例并显示在一边。我没有得到我在位图上触摸的确切位图区域。谁能给我一个解决方案。这是我的代码

Bitmap bitmap = new BitmapShader(modelBitmap, TileMode.CLAMP, TileMode.CLAMP);
Paint paint = new Paint();
matrix1.postScale(2f, 2f, mouseDownX, mouseDownY);
bitmap.setLocalMatrix(matrix1);
paint.setShader(bitmap);
canvas.drawCircle(60,230, (int) (width * 0.10), paint);

这里 mouseDownX 和 mouseDownY 是触摸坐标。我没有得到我触摸的位图的确切区域。

【问题讨论】:

  • 请张贴您已经尝试过的代码并解释什么不起作用。如果您希望开发人员只为您编写此代码,则可能会花费您的钱,而且这可能不是合适的地方。
  • 告诉我我做错了什么?

标签: java android zooming magnify


【解决方案1】:
BitmapShader bitmap = new BitmapShader(modelBitmap, TileMode.CLAMP, 
TileMode.CLAMP);
Paint paint = new Paint();
matrix1.postScale(2f, 2f, mouseDownX, mouseDownY);
bitmap.setLocalMatrix(matrix1);
paint.setShader(bitmap);
canvas.drawCircle(mouseDownX, mouseDownY, (int) (width * 0.10), paint);

请看How to magnify/zoom part of image

【讨论】:

    【解决方案2】:

    创建您自己的类,该类将扩展ImageView 类并覆盖onTouchEventonTouchEvent 方法。获取点击位置并在画布上以您想要的任何形状绘制触摸部分。

    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.BitmapShader;
    import android.graphics.Canvas;
    import android.graphics.Matrix;
    import android.graphics.Paint;
    import android.graphics.PointF;
    import android.graphics.Shader;
    import android.support.v7.widget.AppCompatButton;
    import android.support.v7.widget.AppCompatImageView;
    import android.util.AttributeSet;
    import android.view.MotionEvent;
    import android.widget.ImageView;
    
    
    public class CodesforMagnifierImageView extends AppCompatImageView
    {
    
        private PointF zoomPosition;
        private boolean zooming = false;
        private Matrix matrix;
        private Paint paint;
        private Bitmap bitmap;
        private BitmapShader shader;
        private int sizeOfMagnifier = 200;
    
        public CodesforMagnifierImageView(Context context)
        {
            super(context);
            init();
        }
    
        public CodesforMagnifierImageView(Context context, AttributeSet attrs, int defStyleAttr)
        {
            super(context, attrs, defStyleAttr);
            init();
        }
    
        public CodesforMagnifierImageView(Context context, AttributeSet attrs)
        {
            super(context, attrs);
            init();
        }
    
        private void init()
        {
            zoomPosition = new PointF(0, 0);
            matrix = new Matrix();
            paint = new Paint();
    
        }
    
        @Override
        public boolean onTouchEvent(MotionEvent event)
        {
            int action = event.getAction();
    
            zoomPosition.x = event.getX();
            zoomPosition.y = event.getY();
    
            switch (action)
            {
                case MotionEvent.ACTION_DOWN:
                case MotionEvent.ACTION_MOVE:
                    zooming = true;
                    this.invalidate();
                    break;
                case MotionEvent.ACTION_UP:
                case MotionEvent.ACTION_CANCEL:
                    zooming = false;
                    this.invalidate();
                    break;
    
                default:
                    break;
            }
    
            return true;
        }
    
        @Override
        protected void onDraw(Canvas canvas)
        {
            super.onDraw(canvas);
            if (!zooming)
            {
                buildDrawingCache();
            }
            else
            {
    
                bitmap = getDrawingCache();
                shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
    
                paint = new Paint();
                paint.setShader(shader);
                matrix.reset();
                matrix.postScale(2f, 2f, zoomPosition.x, zoomPosition.y);
                paint.getShader().setLocalMatrix(matrix);
                canvas.drawCircle(zoomPosition.x, zoomPosition.y, sizeOfMagnifier, paint);
            }
        }
    
    
    }
    

    按以下方式使用:

    <com.utilities.CodesforMagnifierImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/image" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-27
      • 1970-01-01
      • 1970-01-01
      • 2011-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多