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