Android: масштабирование с двумя видами - PullRequest
0 голосов
/ 11 апреля 2020

в моем приложении android у меня есть ImageView и поверх него я поставил пользовательский вид, который показывает несколько прямоугольников. Теперь я хочу увеличить изображение, сжимая два пальца. Обычно это не проблема, но я хочу, чтобы пользовательский вид масштабировался с тем же масштабным коэффициентом, что и изображение. Я понятия не имею, как это сделать. Может кто-то мне помочь, пожалуйста? Спасибо!

1 Ответ

0 голосов
/ 11 апреля 2020

Вы можете использовать пользовательский ImageView, предоставленный в этом ответе , который поддерживает масштабирование с зажатием, и чтобы получить значение масштаба, которое будет применяться к вашему пользовательскому представлению, вам нужно создать слушателя с обратным вызовом, который Вы можете вызывать обычно из onScale() метода ScaleListener, как показано ниже

interface OnScaleListener {
    public onScaleChange(float scaleFactor);
}

OnScaleListener mOnScaleListener;

setScaleListener(OnScaleListener listener) {
    this.mOnScaleListener = listener;
}

, и затем вызывать этот обратный вызов со значением mScaleFactor, которое отражает, насколько масштабируется изображение в / вне. так что вы можете создать экземпляр интерфейса onScaleListener в этом классе и вызвать его обратный вызов onScaleChange()

Вот внутренний класс пользовательского ImageView , который обрабатывает масштабирование пинч.

    private class ScaleListener extends
            ScaleGestureDetector.SimpleOnScaleGestureListener {
        @Override
        public boolean onScaleBegin(ScaleGestureDetector detector) {
            mode = ZOOM;
            return true;
        }

        @Override
        public boolean onScale(ScaleGestureDetector detector) {
            float mScaleFactor = detector.getScaleFactor();
            float origScale = saveScale;
            saveScale *= mScaleFactor;
            if (saveScale > maxScale) {
                saveScale = maxScale;
                mScaleFactor = maxScale / origScale;
            } else if (saveScale < minScale) {
                saveScale = minScale;
                mScaleFactor = minScale / origScale;
            }

            if (origWidth * saveScale <= viewWidth
                    || origHeight * saveScale <= viewHeight)
                matrix.postScale(mScaleFactor, mScaleFactor, viewWidth / 2,
                        viewHeight / 2);
            else
                matrix.postScale(mScaleFactor, mScaleFactor,
                        detector.getFocusX(), detector.getFocusY());

            mOnScaleListener.onScaleChange(mScaleFactor);

            fixTrans();
            return true;
        }
    }

А затем в вашем действии или другом пользовательском представлении реализуется интерфейс OnScaleListener для получения значения масштаба.

Пожалуйста, отметьте этот вопрос , чтобы увеличить пользовательский просмотры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...