微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将矩阵粘贴到特定角度

如何解决将矩阵粘贴到特定角度

我将矩阵用于 zoomrotatescale 图像,这是我的 onTouch() 代码,如下所示:

public boolean onTouch(@NonNull View v,@NonNull MotionEvent event) {
    ImageView view = (ImageView) v;
    // make the image scalable as a matrix
    float scale;
    view.setScaleType(ImageView.ScaleType.MATRIX);
    // Handle touch events here...
    switch (event.getAction() & MotionEvent.ACTION_MASK) {

        case MotionEvent.ACTION_DOWN: //first finger down only
            matrix.set(view.getimageMatrix());
            savedMatrix.set(matrix);
            start.set(event.getX(),event.getY());
            Log.d(TAG,"mode=DRAG");
            mode = DRAG;
            lastEvent = null;
            break;
        case MotionEvent.ACTION_UP: //first finger lifted
        case MotionEvent.ACTION_POINTER_UP: //second finger lifted
            mode = NONE;
            lastEvent = null;
            Log.d(TAG,"mode=NONE");
            break;
        case MotionEvent.ACTION_POINTER_DOWN: //second finger down
            olddist = getSpacing(event); // calculates the distance between two points where user touched.
            Log.d(TAG,"olddist=" + olddist);
            // minimal distance between both the fingers
            if (olddist > 10f) {
                savedMatrix.set(matrix);
                getMidPoint(mid,event); // sets the mid-point of the straight line between two points where user touched.
                mode = ZOOM;
                Log.d(TAG,"mode=ZOOM");
            }
            lastEvent = new float[4];
            lastEvent[0] = event.getX(1);
            lastEvent[1] = event.getX(0);
            lastEvent[2] = event.getY(1);
            lastEvent[3] = event.getY(0);
            d = getRotation(event);
            break;

        case MotionEvent.ACTION_MOVE:
            if (mode == DRAG) { //movement of first finger
                matrix.set(savedMatrix);
                if (view.getLeft() >= -392) {
                    matrix.postTranslate(event.getX() - start.x,event.getY() - start.y);
                }
            } else if (mode == ZOOM && event.getPointerCount() == 2) { //pinch zooming
                float newdist = getSpacing(event);
                matrix.set(savedMatrix);
                Log.d(TAG,"newdist=" + newdist);
                if (newdist > 10f) {
                    matrix.set(savedMatrix);
                    scale = newdist / olddist; //thinking I need to play around with this value to limit it**
                    matrix.postScale(scale,scale,mid.x,mid.y);
                }
                if (lastEvent != null) {
                    newRot = getRotation(event);
                    float r = newRot - d;
                    matrix.postRotate(r,view.getMeasuredWidth() / 2f,view.getMeasuredHeight() / 2f);
                }

                float rotation = getoriginalRotation();
                if (rotation > -7 && rotation < 7) {
                    rotateImagetoZeroAngle();
                }

            }
            break;
    }

    // Perform the transformation
    view.setimageMatrix(matrix);

    return true; // indicate event was handled
}

现在,当旋转在 0 之间时,我想将矩阵旋转粘贴到 -3 to 3 并且为此我添加方法 getoriginalRotation()获取旋转并添加了另一种方法来设置旋转 {{ 1}} 如下所示:

rotateImagetoZeroAngle()

现在,我不知道是什么问题,但这不起作用。顺便说一下,当我将 private void rotateImagetoZeroAngle() { Matrix curMatrix = mainImage.getimageMatrix(); float[] v = new float[9]; matrix.getValues(v); curMatrix.setValues(v); mainImage.setScaleType(ImageView.ScaleType.MATRIX); curMatrix.setRotate(0); mainImage.setimageMatrix(curMatrix); } 更改为 scaleType 时它会起作用,但在 FIT_CENTER 度图像之间在给定区域和 -3 to 3 scaleType 中调整大小为 FIT,它将不起作用。 我需要一些帮助,任何帮助将不胜感激,先谢谢你!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。