WebView判断手势缩放

		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中提供一个放大缩小视口的接口 直接调用等多种方式

仅起到抛砖引玉的作用

猜你喜欢

转载自johncookie.iteye.com/blog/1671732