java - Android:缩放两个视图
问题描述
在我的 android 应用程序中,我有一个 ImageView,在它上面我放了一个自定义视图,它显示了一些矩形。现在我想通过捏两根手指来放大图像。通常这不是问题,但我希望自定义视图以与图像相同的比例因子进行缩放。我不知道如何做到这一点。有人能帮助我吗?谢谢!
解决方案
您可以使用此答案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
接口以获取比例值。
请检查此问题以放大自定义视图。
推荐阅读
- python - CPLEX Python-创建具有二次项和线性项的目标函数
- php - 在 laravel 中进行 Eloquent 更新而不删除旧内容
- python - 在每个图像像素中为 2D 图像创建居中的补丁
- javascript - 日期格式的正则表达式,其中我们只有一位日期
- powerbi - DAX ALLEXCEPT, ALL FUNCTION.. 想要在每一行中显示总体平均值
- c++ - 您如何管理指向在派生类中扩展的基类的指针?
- flutter - Flutter 小部件测试点击 - 不会在指定的小部件上进行测试
- apache-flink - Flink - 在保存点启动期间使用操作员的延迟启动
- sql - PostgreSQL 中的 SqlBulkCopy 有什么合适的替代品吗?
- sapui5 - 未显示 Popover 中的绑定内容