Android: 缩放两个视图
Android: Zooming with two views
在我的 android 应用程序中,我有一个 ImageView,在它上面放了一个自定义视图,其中显示了一些矩形。现在我想通过捏两根手指来放大图像。通常这不是问题,但我希望自定义视图以与图像相同的比例因子进行缩放。我不知道该怎么做。有人能帮助我吗?
谢谢!
您可以使用 this answer 中提供的自定义 ImageView
,它支持捏合缩放,要获取要应用到自定义视图的缩放值,您需要创建一个带有回调的侦听器您通常可以从 ScaleListener
的 onScale()
方法调用,如下所示
interface OnScaleListener {
public onScaleChange(float scaleFactor);
}
OnScaleListener mOnScaleListener;
setScaleListener(OnScaleListener listener) {
this.mOnScaleListener = listener;
}
然后使用 mScaleFactor
的值触发此回调,该值反映图像缩放了多少 in/out。因此您可以在此 class 中创建 onScaleListener 接口的实例,并触发其回调 onScaleChange()
这里是 custom ImageView 的内部 class 处理缩放。
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;
}
}
然后让你的 activity 或你的其他自定义视图实现 OnScaleListener
接口来获取比例值。
请选中此 question 以放大自定义视图。
在我的 android 应用程序中,我有一个 ImageView,在它上面放了一个自定义视图,其中显示了一些矩形。现在我想通过捏两根手指来放大图像。通常这不是问题,但我希望自定义视图以与图像相同的比例因子进行缩放。我不知道该怎么做。有人能帮助我吗? 谢谢!
您可以使用 this answer 中提供的自定义 ImageView
,它支持捏合缩放,要获取要应用到自定义视图的缩放值,您需要创建一个带有回调的侦听器您通常可以从 ScaleListener
的 onScale()
方法调用,如下所示
interface OnScaleListener {
public onScaleChange(float scaleFactor);
}
OnScaleListener mOnScaleListener;
setScaleListener(OnScaleListener listener) {
this.mOnScaleListener = listener;
}
然后使用 mScaleFactor
的值触发此回调,该值反映图像缩放了多少 in/out。因此您可以在此 class 中创建 onScaleListener 接口的实例,并触发其回调 onScaleChange()
这里是 custom ImageView 的内部 class 处理缩放。
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;
}
}
然后让你的 activity 或你的其他自定义视图实现 OnScaleListener
接口来获取比例值。
请选中此 question 以放大自定义视图。