Как увеличить точку касания растрового изображения в Android?

Я пытаюсь реализовать лупу в моем приложении для 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 - это сенсорные координаты. Я не получаю точную область растрового изображения, где я коснулся.

2 ответа

Создайте свой собственный класс, который будет расширяться ImageView класс и переопределить onTouchEvent а также onTouchEvent методы. Получите выбранное место и нарисуйте касаемую часть на холсте в любой форме.

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

пожалуйста, смотрите Как увеличить / увеличить часть изображения

Другие вопросы по тегам