缩小时如何将图像返回到原始位置-AndroidX

问题描述 投票:0回答:1

当我缩小图像并且图像比例小于第一个初始图像尺寸时,我想将图像返回到原始位置

@Override
public boolean onTouch(View v, MotionEvent event)
{
    ImageView view = (ImageView) v;
    view.setScaleType(ImageView.ScaleType.MATRIX);
    float scale = 0;

    dumpEvent(event);
    // Handle touch events here...

    switch (event.getAction() & MotionEvent.ACTION_MASK)
    {
        case MotionEvent.ACTION_DOWN:   // first finger down only
            savedMatrix.set(matrix);
            start.set(event.getX(), event.getY());
            Log.d(TAG, "mode=DRAG"); // write to LogCat
            mode = DRAG;
            break;

        /*case MotionEvent.ACTION_UP: // first finger lifted

        case MotionEvent.ACTION_POINTER_UP: // second finger lifted

            mode = NONE;
            Log.d(TAG, "mode=NONE");
            break;*/

        case MotionEvent.ACTION_UP: // first finger lifted
            mode = NONE;
            break;
        case MotionEvent.ACTION_POINTER_UP:// second finger lifted
            /*matrix.set(savedMatrix);*/
            /*view.setScaleType(ImageView.ScaleType.CENTER);*/
            Log.v("/h/", ""+scale);

            mode = ZOOMOUT;


            //When release back to position
            matrix.set(savedMatrix);
            Log.d(TAG, "mode=ZOOMOUT");
            break;

        case MotionEvent.ACTION_POINTER_DOWN: // first and second finger down

            oldDist = spacing(event);
            Log.d(TAG, "oldDist=" + oldDist);
            if (oldDist > 5f) {
                savedMatrix.set(matrix);
                midPoint(mid, event);
                mode = ZOOM;
                Log.d(TAG, "mode=ZOOM");
            }
            break;

        case MotionEvent.ACTION_MOVE:

            if (mode == DRAG)
            {
                matrix.set(savedMatrix);
                matrix.postTranslate(event.getX() - start.x, event.getY() - start.y); // create the transformation in the matrix  of points
            }
            else if (mode == ZOOM)
            {
                // pinch zooming
                float newDist = spacing(event);
                Log.d(TAG, "newDist=" + newDist);

                if (newDist > 5f)
                {
                    matrix.set(savedMatrix);
                    scale = newDist / oldDist; // setting the scaling of the
                    // matrix...if scale > 1 means
                    // zoom in...if scale < 1 means
                    // zoom out
                    if(scale>1) {
                        //Zoom In
                    }else if(scale<1) {
                        //Zoom Out
                    }


                    matrix.postScale(scale, scale, mid.x, mid.y);

                    Log.v("/h/", ""+scale+mode);

                }

            }


            break;

    }

    view.setImageMatrix(matrix); // display the transformation on screen

    return true; // indicate event was handled
}

/*
 * --------------------------------------------------------------------------
 * Method: spacing Parameters: MotionEvent Returns: float Description:
 * checks the spacing between the two fingers on touch
 * ----------------------------------------------------
 */

private float spacing(MotionEvent event)
{
    float x = event.getX(0) - event.getX(1);
    float y = event.getY(0) - event.getY(1);
    return (float) Math.sqrt(x * x + y * y);
}

/*
 * --------------------------------------------------------------------------
 * Method: midPoint Parameters: PointF object, MotionEvent Returns: void
 * Description: calculates the midpoint between the two fingers
 * ------------------------------------------------------------
 */

private void midPoint(PointF point, MotionEvent event)
{
    float x = event.getX(0) + event.getX(1);
    float y = event.getY(0) + event.getY(1);
    point.set(x / 2, y / 2);
}
java android zoom ontouchlistener pinchzoom
1个回答
0
投票
在ACTION_DOWN上将savedMatrix设置为view.getImageMatrix()
    在单独的矩阵上进行缩放/拖动更改
© www.soinside.com 2019 - 2024. All rights reserved.