我想将 GestureDetector 类添加到我的 web 视图中,以便我可以管理常见的手势,例如双击。
这是我试图完成的事情:
- SingleTap 将正常运行
- DoubleTap 将打开项目(更多内容见下文)
关于 DoubleTap - 相关站点的源代码定义了如何处理某些项目的单击和双击。它指出单击选择一个项目,双击打开该项目。我必须对这些项目含糊其辞,因为它不是公共网站。
我不需要配置甩动或滑动。我只是想重新创建 PC 鼠标单击和双击。
编辑: 我添加了来自 Pat 的以下建议。我根据自己的喜好更改了一些内容,并从其他来源添加了一些内容。
在 Pat 的帮助下,我使用了这个问题来帮助构建我的 Activity。使用“第一种方式”代码,它正确加载了我的应用程序并成功地按照设计重新加载了页面。现在,我只需要添加其他事件处理程序并正确配置它们。当我让它工作时将发布最终代码,我会将 Pat 的答案标记为正确。
该用户正在问同样的问题,但没有答案: 如何使双击起作用。
它说这是贬值的 GestureDetector(new MyGestureDetector()); - 我应该解决这个问题吗?
编辑 2:由于提出的实际问题是如何将手势检测器添加到 webview 并且我能够做到这一点,所以我会将 Pat 的答案标记为正确。即使我确实想让 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);
}
}
~ 丹