2011-10-18 10 views
0

Androidアプリのwebviewで「ontouchmove」を聴いています。これらのイベントは2.3でうまくいくようですが、Honeycombでは1つのイベントが発生したようです。何が起きているのか?Honeycomb webview ontouchmove events

答えて

1

私の答えのコードサンプルはgwtサンプルですが、JavaScriptでも同じです。

スクロールを許可するために、最初にonTouchMoveの後にWebViewがイベントを引き継ぎます。あなたは、これは特にハニカムの事である理由を私は知らないが、あなたが最初にonTouchMoveイベントをキャッチし、この時点で決定した場合、あなたはpreventDefault()を呼び出すことによって引き継ぐしたい場合は

event.preventDefault(); 

への呼び出しでこれを防ぐことができます多くのケースを処理できるはずです。たとえば、基本的な機能(垂直スクロール、リンクなど)が機能するようにしながら、水平スワイプを実装したかったのです。

@Override 
public void onBrowserEvent(Event event) { 
    switch (event.getTypeInt()) { 
    case Event.ONTOUCHSTART: 
     startPoint = new Point(event.getChangedTouches().get(0).getClientX(), event.getChangedTouches().get(0).getClientY()); 
     break; 
    case Event.ONTOUCHMOVE: 
     endPoint = new Point(event.getChangedTouches().get(0).getClientX(), event.getChangedTouches().get(0).getClientY()); 
     double dx = startPoint.getX() - endPoint.getX(); 
     double dy = startPoint.getY() - endPoint.getY(); 
     if (Math.abs(dx) > SWIPE_X_MIN) { 
      if (Math.abs(dy) < SWIPE_Y_MAX) { 
       // Decided it really is a horizontal swipe 
       event.preventDefault(); 
       if (dx < 0) { 
        Window.alert("swiped right"); 
       } else { 
        Window.alert("swiped left"); 
       } 
      } 
     } 
     break; 
    }  
} 

洞察が得られることを願っています。

+0

ヒントありがとうございます! 私はGWTを使用しており、タッチ移動イベント処理を必要とする機能を実装しています。あなたのソリューションは私のために働く。再度、感謝します。 –

0

preventDefault on touchstartはイベントを発生させますが、ネイティブのスクロールは無効になります...(理想的ではありません)何百万のAndroidデバイスに埋め込まれているこの問題を解決しようとするシムがあります。 https://github.com/TNT-RoX/android-swipe-shim