2013-01-23 5 views
6

Androidアプリケーションでは、ViewPagerを使用してHTMLページをブラウズでき、ユーザーはハイライトする要素に触れることができます。Android - JavaScript:ページをズームまたはスクロールするまでtouchstartイベントが発生しない

問題は、次のコードを使用してjavascriptを使用してtouchイベントを取得しようとすると、新しいページに移動するときにnullを返しますが、ユーザーがページをズームしたりスクロールした後は正しく動作します。

タッチスタートイベントの登録は、ズームまたはスクロールした後に発生することがわかりました。それは$(ドキュメント).ready()

 $(document).ready(function(){ 
      document.addEventListener("touchstart", touchstart, false);  
     });  

     function touchstart(e) {        
      var x = e.targetTouches[0].clientX; 
      var y = e.targetTouches[0].clientY;        
      el = document.elementFromPoint(x, y); 
      } 

に登録されているが、それは正しいことの後に動作します

答えて

7

書き込みJavaScriptを呼び出した後、あなたのJavaコードの次のコードをありがとう:

myWebview.scrollTo(1, 0); 
    myWebview.scrollTo(0, 0); 

ズームインしてからズームアウトする

myWebview.zoomIn(); 
    myWebview.zoomOut(); 
+0

ありがとう、このコードはうまくいきますが、なぜですか? –

+0

かなりハッキリと感じますが、うまくいきます。ところで、WebViewをオフスクリーンからアニメーション化する場合は、アニメーションが完了した後でこれらのコード行を実行する必要があります。私はAnimator.AnimatorListener()のonAnimationEndメソッドでそれを設定し、それは素晴らしい動作します。私はまた、ページの内容がスクロールを必要とするほど大きくない場合でも動作することを確認しました。 –

+0

Brian - アニメーションが完了するのを待たずにzoomin/zoomoutメソッドを呼び出すと、webviewが白いかどうか覚えていますか? –

0

モハメドアブデルラティフの解法を使用しています(明らかにこれはanothです私の不自由なWebViewのバグ)は、Android 4.1.2で私のために修正したものです。 注:Android 4.4.2でこれをテストしましたが、このハックからフィックスバグは必要ありません。

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 

    final WebView myWebView = (WebView) findViewById(R.id.mywebview); 
    myWebView.setHorizontalScrollBarEnabled(false); 
    myWebView.getSettings().setJavaScriptEnabled(true); 
    myWebView.loadDataWithBaseURL("file:///android_asset/", YOUR_HTML_GOES_HERE, "text/html", "utf-8", null); 

    myWebView.setWebViewClient(new WebViewClient() 
    { 
     // overcome the ontouchstart registration bug ! 
     @Override 
     public void onPageFinished(WebView view, String url) 
     { 
      super.onPageFinished(view, url); 
      final WebView myWebView = (WebView) findViewById(R.id.mywebview); 
      myWebview.scrollTo(1, 0); 
      myWebview.scrollTo(0, 0); 
     } 
    }); 
} 
関連する問題