Android 如何使用脚蹼启用多点触控缩放的webview滑动手势检测
那么,webview控件在能够进行多点触控缩放和内置缩放控件的同时,是否有一种检测滑动的方法呢?是的!有一种实现WebView并创建自定义WebView的方法 这样,自定义WebView就具有内置功能 刷卡检测同时具有多点触控和内置控制 用于缩放Android 如何使用脚蹼启用多点触控缩放的webview滑动手势检测,android,multi-touch,swipe,Android,Multi Touch,Swipe,那么,webview控件在能够进行多点触控缩放和内置缩放控件的同时,是否有一种检测滑动的方法呢?是的!有一种实现WebView并创建自定义WebView的方法 这样,自定义WebView就具有内置功能 刷卡检测同时具有多点触控和内置控制 用于缩放 //Declaring the custom Webview and put into a viewflipper MyWebView[] webview =new MyWebView[2]; flipper = (ViewFlipper)
//Declaring the custom Webview and put into a viewflipper
MyWebView[] webview =new MyWebView[2];
flipper = (ViewFlipper) findViewById(R.id.ViewFlipper);
webview[i] = new MyWebView(this);
webview[i].setWebViewClient(new HelloWebViewClient());
webview[i].getSettings().setJavaScriptEnabled(false);
webview[i].setInitialScale(60);
webview[i].getSettings().setBuiltInZoomControls(true);
flipper.addView(webview[0]);
flipper.addView(webview[1]);
这是自定义的webview
public class MyWebView extends WebView {
public MyWebView(Context context) {
super(context);
}
@Override
public boolean onTouchEvent(MotionEvent evt) {
boolean consumed = super.onTouchEvent(evt);
if (isClickable()) {
switch (evt.getAction()) {
case MotionEvent.ACTION_DOWN:
lastTouchX = evt.getX();
lastTouchY = evt.getY();
downXValue = evt.getX();
downTime = evt.getEventTime();
hasMoved = false;
break;
case MotionEvent.ACTION_MOVE:
hasMoved = moved(evt);
break;
case MotionEvent.ACTION_UP:
float currentX = evt.getX();
long currentTime = evt.getEventTime();
float difference = Math.abs(downXValue - currentX);
long time = currentTime - downTime;
Log.i("Touch Event:", "Distance: " + difference + "px Time: " + time + "ms");
if ( (downXValue < currentX) && (time < 220) && (difference > 100) ) {
go_back();
}
if ( (downXValue > currentX) && (time < 220) && (difference > 100) ) {
go_forward();
}
//if (!moved(evt)) performClick();
break;
}
}
return consumed || isClickable();
}
float downXValue;
long downTime;
private float lastTouchX, lastTouchY;
private boolean hasMoved = false;
private boolean moved(MotionEvent evt) {
return hasMoved ||
Math.abs(evt.getX() - lastTouchX) > 10.0 ||
Math.abs(evt.getY() - lastTouchY) > 10.0;
}
}
公共类MyWebView扩展了WebView{
公共MyWebView(上下文){
超级(上下文);
}
@凌驾
公共布尔onTouchEvent(MotionEvent evt){
布尔消耗=super.onTouchEvent(evt);
如果(isClickable()){
开关(evt.getAction()){
case MotionEvent.ACTION\u DOWN:
lastTouchX=evt.getX();
lastTouchY=evt.getY();
downXValue=evt.getX();
停机时间=evt.getEventTime();
hasMoved=false;
打破
case MotionEvent.ACTION\u移动:
hasmove=移动(evt);
打破
case MotionEvent.ACTION\u UP:
float currentX=evt.getX();
long currentTime=evt.getEventTime();
浮动差=数学绝对值(向下x值-当前x);
长时间=当前时间-停机时间;
Log.i(“触摸事件:”、“距离:“+差异+”像素时间:“+时间+”毫秒”);
如果((向下X值<当前X)&(时间<220)&(差值>100)){
回去;
}
如果((下降值>当前值)&(时间<220)&(差值>100)){
向前走;
}
//如果(!moved(evt))执行单击();
打破
}
}
返回已消耗的| | isClickable();
}
浮动下降值;
停机时间长;
私人浮动lastTouchX,lastTouchY;
私有布尔hasMoved=false;
私有布尔移动(MotionEvent evt){
返回已移动| |
Math.abs(evt.getX()-lastTouchX)>10.0 | |
Math.abs(evt.getY()-lastTouchY)>10.0;
}
}
就是这样。你有内置的刷卡检测。代码有点“伪代码”,没有清理它,但是在MotionEvent.ACTION\u MOVE和case MotionEvent.ACTION\u up中重写onTouchEvent就可以了。你也可以玩时间和差分界限。回答你自己的问题没什么错,但如果你能提出一个问题并输入答案,而不是把所有的东西都放在问题里,那会更好。这使人们更容易对你的解决方案做出反应,并为你的问题提供可能的替代解决方案。。但我会的。那样可能更明显。我试过了,但放大/缩小时出现了问题。当您将缩放缩回原始大小时,它会重置webview大小。