所以我花了几个小时在网上寻求帮助,但所有论坛和文档都没有正确地向我解释我应该采取的最佳方式。
目前我有一个XML相对布局的活动(背景设置为地图的图片),我想实现一个多手势缩放功能。经过大量阅读后,似乎我应该使用ScrollGestureDetector,它必须在视图中实现。
我想这样做,以便用户可以在屏幕上的任何位置使用2指针手势,它将放大。问题是我不知道如何实现这个并且找不到要显示的资源我怎么做这个活动。
我有什么办法可以为RelativeLayout实现ScrollGestureDetector吗?我应该创建一个覆盖整个屏幕并显示图片的自定义视图,以便我可以在类定义中实现ScrollGestureDetector吗?我应该怎么做呢?
答案 0 :(得分:2)
如果图像在std::unique_lock
范围内,使用缩放缩放来缩放图像效果最佳。 ImageView
可以任意缩放图像,而背景图像仅根据视图边界进行缩放。
您只需使用包含ImageView
的布局调用活动setContentView()
。
要在代码中使用ScaleGestureDetector,您必须执行以下操作
在视图中声明ScaleGestureDetector。
ImageView
使用缩放事件侦听器初始化它,最好在private ScaleGestureDetector mScaleGestureDetector;
:
onCreate()
将ScaleGestureDetector添加到mScaleGestureDetector = new ScaleGestureDetector(this, new ScaleGestureDetector.OnScaleGestureListener() {
@Override
public boolean onScale(ScaleGestureDetector detector) {
// your impl here
return false;
}
@Override
public boolean onScaleBegin(ScaleGestureDetector detector) {
// your impl here
return false;
}
@Override
public void onScaleEnd(ScaleGestureDetector detector) {
// your impl here
}
})
方法:
onTouchEvent()
奇怪的是,@Override
public boolean onTouchEvent(MotionEvent event) {
mScaleGestureDetector.onTouchEvent(event);
// do other stuff
return super.onTouchEvent(event);
}
总是返回true,但您可以使用ScaleGestureDetector.onTouchEvent()
来判断是否已开始缩放操作。