wv.setOnTouchListener(new OnTouchListener() {
private float OldX1, OldY1, OldX2, OldY2;
private float NewX1, NewY1, NewX2, NewY2;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_POINTER_2_DOWN:
if (event.getPointerCount() == 2) {
OldX1 = event.getX(0);
OldY1 = event.getY(0);
OldX2 = event.getX(1);
OldY2 = event.getY(1);
}
break;
case MotionEvent.ACTION_MOVE:
if (event.getPointerCount() == 2) {
if(OldX1 == -1 && OldX2 == -1)
break;
NewX1 = event.getX(0);
NewY1 = event.getY(0);
NewX2 = event.getX(1);
NewY2 = event.getY(1);
float disOld = (float) Math.sqrt((Math.pow(OldX2
- OldX1, 2) + Math.pow(OldY2 - OldY1, 2)));
float disNew = (float) Math.sqrt((Math.pow(NewX2
- NewX1, 2) + Math.pow(NewY2 - NewY1, 2)));
Log.e("onTouch", "disOld=" + disOld + "|disNew="
+ disNew);
if (disOld - disNew >= 25) {
// 缩小
// wv.zoomOut();
wv.loadUrl("javascript:mapScale=1;");
Log.e("onTouch", "zoomOut");
} else if (disNew - disOld >= 25) {
// 放大
// wv.zoomIn();
wv.loadUrl("javascript:mapScale=-1;");
Log.e("onTouch", "zoomIn");
}
OldX1 = NewX1;
OldX2 = NewX2;
OldY1 = NewY1;
OldY2 = NewY2;
}
break;
case MotionEvent.ACTION_UP:
if (event.getPointerCount() < 2) {
OldX1 = -1;
OldY1 = -1;
OldX2 = -1;
OldY2 = -1;
}
break;
}
return false;
}
});
代码很容易理解 判断触控的手指数 同时去比较前后2点间的距离 从而做到手势缩放 最后发送消息到webview
在js中这里是模拟了鼠标滚轮的缩放 所以只给了一个mapscale 具体的情况也可以在js中提供一个放大缩小视口的接口 直接调用等多种方式
仅起到抛砖引玉的作用