2013-12-20 21 views
5

我想給GestureDetector類添加到我的WebView,這樣我可以處理常見的手勢,如doubletap。的Android - 添加GestureDetector到的WebView

這裏就是我試圖完成:

  • SingleTap都將正常
  • DoubleTap將打開的項目(詳見下文)

關於DoubleTap - 有問題的網站有定義如何處理某些項目的單擊和雙擊的源代碼。它規定只需單擊一次即可選擇一個項目,雙擊打開該項目。由於它不是公共場所,因此我必須對這些物品保持模糊。

我不需要配置fl or或滑動。我只是試圖重新創建PC鼠標單擊和雙擊。

編輯:我在從專利下面的建議加入。我根據自己的喜好改變了一些東西,並從其他來源添加了一些東西。

我以前this question,以幫助建立我的活動以及帕特的幫助。使用「第一種方式」代碼,它會正確加載我的應用程序併成功地按照設計重新加載頁面。現在,我只需要添加其他事件處理程序並正確配置它們。當我開始工作時會發布最終代碼,我將Pat的答案標記爲正確。

該用戶被要求沒有回答同一個問題:How to make double clicks work.

它說,這是貶值GestureDetector(新MyGestureDetector()); - 我應該解決這個問題嗎?

編輯2:由於實際問題問的是如何增加gesturedetecor到的WebView,我能做到這一點,我將迎來帕特的答案是正確的。儘管我確實想要doubleTap =雙擊,但我沒有在我的標題中提出這樣的問題,所以我會爲此創建一個新問題。

import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.webkit.SslErrorHandler; 
import android.net.http.SslError; 
import android.os.Bundle; 
import android.app.Activity; 
import android.util.Log; 
import android.view.GestureDetector; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.GestureDetector.SimpleOnGestureListener; 
import android.view.MotionEvent; 

public class MainActivity extends Activity{ 
    WebView webview;  

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     webview = (WebView) findViewById(R.id.webview); 
     //Do we want/need to enable Java? 
     webview.getSettings().setJavaScriptEnabled(true); 
     //Here we allow for zoom controls - pinch 
     webview.getSettings().setBuiltInZoomControls(true); 
     //Here we remove the zoom control buttons - requires API 11 
     webview.getSettings().setDisplayZoomControls(false); 
     //Here we clear the Cache and SSL Preferences  
     webview.clearCache(true); 
     webview.clearSslPreferences(); 
     //Do we need to enable scroll bars to allow people to scroll left and right?   
     webview.setHorizontalScrollBarEnabled(true); 
     webview.setVerticalScrollBarEnabled(true); 
     webview.setWebViewClient(new WebViewClient()); 
     webview.loadUrl("website"); 

     final GestureDetector gd = new GestureDetector(new MyGestureDetector()); 
     View.OnTouchListener gl = new View.OnTouchListener() { 
      public boolean onTouch(View v, MotionEvent event) { 
       return gd.onTouchEvent(event); 
      } 
     }; 
     webview.setOnTouchListener(gl); 
    } 

class MyGestureDetector extends SimpleOnGestureListener {  
    @Override 
    public boolean onDoubleTapEvent(MotionEvent e) { 
     Log.i("", "DoubleTapEvent"); 
     return true; 
     } 

    }  


// Ignore SSL certificate errors  
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { 
     handler.proceed(); 
    } 

//Would like to have a Menu Button to refresh the page - or really just bring you to the login page - for use when the session times out  
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    menu.add(1, 1, 0, "Refresh"); 
    //removed below to have only buttons show 
    //getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
    } 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch(item.getItemId()){ 
    case R.id.refresh: 
     webview.loadUrl("website"); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 

} 

} 

〜丹

回答

4

你問如何設置監聽器來處理單/雙水龍頭?子類GestureDetector.SimpleOnGestureListener,並設置爲你的觸摸聽衆:

public class GestureListener extends GestureDetector.SimpleOnGestureListener { 

,然後覆蓋onSingleTapConfirmed的一個水龍頭和onDoubleTap方法。然後在你的webview上設置一個觸摸監聽器,onTouch只需調用你的GestureListener的onTouchEvent。

編輯:

final GestureDetector gestureDetector = new GestureDetector(context, new GestureListener()); 

       webview.setOnTouchListener(new OnTouchListener() { 

        @Override 
        public boolean onTouch(View v, MotionEvent event) { 
         return gestureDetector.onTouchEvent(event); 
        } 
       }); 
+0

這可能是我所期待的 - 我在找的怎麼樣,現在實現觸摸監聽到我的代碼示例。 – Dan

+0

看到我上面的編輯,實例化手勢檢測器,設置ontouchlistener,然後調用gesturedetector.ontouchevent。請將答案標記爲已接受,如果這是您正在尋找的內容。 – pat

+0

我無法理解這些添加項屬於我的主要活動的代碼中。 – Dan