Android 如何使用脚蹼启用多点触控缩放的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)

那么,webview控件在能够进行多点触控缩放和内置缩放控件的同时,是否有一种检测滑动的方法呢?

是的!有一种实现WebView并创建自定义WebView的方法 这样,自定义WebView就具有内置功能 刷卡检测同时具有多点触控和内置控制 用于缩放

//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大小。