【问题标题】:How to webview swipe gesture detect with multitouch zooming enabled withing a flipper如何在脚蹼内启用多点触控缩放的 webview 滑动手势检测
【发布时间】:2010-07-14 10:16:57
【问题描述】:

那么有没有办法让 webview 控件检测滑动,同时能够进行多点触控缩放并具有内置缩放控件?

【问题讨论】:

  • 回答你自己的问题并没有错,但如果你能提出一个问题并输入一个答案,而不是把所有东西都放在问题中,那就更好了。这使人们更容易响应您的解决方案,并可能为您的问题提供替代解决方案。
  • 典型这不是一个问题..但我会这样做。这样可能更明显。

标签: android multi-touch swipe


【解决方案1】:

是的!有一种方法可以实现 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]);

这是自定义网页视图

 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; 
     }

 }

就是这样。你已经构建了滑动检测。代码有点“伪代码”并且没有清理它但是覆盖 MotionEvent.ACTION_MOVE 中的 onTouchEvent 和案例 MotionEvent.ACTION_UP 应该可以解决问题。你也可以玩弄时间和差异界限。

【讨论】:

  • 我试过这个,但它给我放大/缩小的问题。当您将缩放缩放回原始大小时,它会重置 webview 大小。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-25
  • 1970-01-01
相关资源
最近更新 更多