Мне нужно повернуть и увеличить холст (Surfaceview) в моем приложении android - PullRequest
0 голосов
/ 25 февраля 2020

Ниже приведен метод, позволяющий пользователям масштабировать холст. Пинч-зум работает нормально, теперь я просто хочу повернуть холст по движению пальца.

Я пробовал различные решения, но не нашел ни одного решения, которое бы соответствовало моему требованию.

как выполнить sh что, какой дополнительный код я должен сделать, чтобы выполнить sh то, что мне нужно.

if (mPaintor.mStatus == 4) {
    if (mScale == 1.0F) {
        return true;
    }

    mTx = i1 - mX;
    mTy = i3 - mY;
    mTmpMatrix.set(mMatrix);
    mTmpMatrix.postTranslate(mTx, mTy);

    if (isPaintOutScreen(mTmpMatrix, dxdy)) {
        mTx = mTx + dxdy[0];
        mTy = mTy + dxdy[1];
    }

    mMatrix.postTranslate(mTx, mTy);

    if (mScale == 10)
        mMatrix.reset();

    mMatrix.invert(mInvMatrix);
    mX = i1;
    mY = i3;
    reDraw(null);
}

if (mPaintor.mStatus == 3) {
    i = 0;
    try {
        float f42 = (float) Math.sqrt((pMotionEvent.getX(0) - pMotionEvent.getX(1)) *
                (pMotionEvent.getX(0) - pMotionEvent.getX(1)) +
                (pMotionEvent.getY(0) - pMotionEvent.getY(1)) *
                        (pMotionEvent.getY(0) - pMotionEvent.getY(1)));
        midPoint(newMidPoint, pMotionEvent);
        float f44 = f42 - oldDist;
        oldDist = f42;
        if (f44 > 50.0F)
            f44 = 50.0F;
        else if (f44 < -50.0F)
            f44 = -50.0F;
        mScale = mOrigScale + (int) ((f44 / 10.0F) / mDensity);

        if (mScale > MAX_SCALE) {
            mScale = MAX_SCALE;
        } else if (mScale < MIN_SCALE) {
            mScale = MIN_SCALE;
        }

        mTmpMatrix.set(mMatrix);
        mTmpMatrix.postScale(mScale * 1.0F / mOrigScale, mScale * 1.0F / mOrigScale, mPivotX, mPivotY);

        if (isPaintOutScreen(mTmpMatrix, dxdy)) {
            mTmpMatrix.postTranslate(dxdy[0], dxdy[1]);
        }

        mMatrix.set(mTmpMatrix);

        if (mScale == 10)
            mMatrix.reset();

        mMatrix.invert(mInvMatrix);
        reDraw(null);
        mOrigScale = mScale;
        mX = i1;
        mY = i3;
    } catch (IllegalArgumentException lIllegalArgumentException) {
        mScale = mOrigScale;
    }
}

...