2010-07-14 64 views
4

因此,有沒有一種方法可以讓webview控件在檢測滑動的同時能夠進行多點觸控縮放並具有內置縮放控件?如何通過使用腳蹼使用多點觸控縮放來實現web查看輕掃手勢檢測

+0

回答你自己的問題沒有錯,但如果你能提出一個問題並輸入答案,而不是隻是把問題中的所有內容都放好,那會更好。這使人們更容易響應您的解決方案,併爲您的問題提供備用解決方案。 – 2010-07-14 10:20:13

+0

典型的它不是一個問題..但我會做它。這可能是更明顯的方式。 – weakwire 2010-07-14 10:25:35

回答

5

YES!沒有這樣做,通過實施的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; 
    } 

} 

這就是It.You必須建立在刷卡detection.Code是有點「僞」,並沒有清理了,但重寫的onTouchEvent在MotionEvent.ACTION_MOVE和案例MotionEvent.ACTION_UP應該做的trick.You還可以玩時間和差異的界限。

+0

我試過這個,但它給我一個放大/縮小的問題。當您縮放縮放到原始大小時,它會重置web視圖大小。 – MegaNairda 2012-12-12 09:32:53