【问题标题】:Handle Touch Events inside WebView in android在android中处理WebView中的触摸事件
【发布时间】:2012-03-01 16:03:23
【问题描述】:

我创建了从资产文件夹加载 html 文件的 WebView。 现在,当我将 GestureDetecter 放入该 WebView 时,它会停止工作 ScrollView 和 html 页面内的链接。 但是当我删除 GestureDetecter 时,ScrollView 和链接都可以正常工作。

以下是我的完整代码,

(我使用了两个 html 文件 1.html 和 2.html,您可以使用任何 html 文件代替它,它可以允许滚动并将两个文件放入资产文件夹)

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.LinearLayout;

public class DemoWebViewActivity extends Activity {

    private MyWebView mWebView;
    private WebViewClient client;

    private LinearLayout lymain;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        lymain = new LinearLayout(getApplicationContext());
        lymain.setOrientation(1);

        mWebView = new MyWebView(getApplicationContext());
        mWebView.setWebViewClient(client);
        mWebView.setVerticalScrollBarEnabled(false);
        mWebView.loadUrl("file:///android_asset/1.html");   

        lymain.addView(mWebView);
        setContentView(lymain);
    }

    class MyWebView extends WebView
    {
        Context context;
        GestureDetector gd;

        public MyWebView(Context context) {
            super(context);
            // TODO Auto-generated constructor stub

            this.context = context;
            gd = new GestureDetector(context, sogl);
        }

        public boolean onTouchEvent(MotionEvent event) {

            return (gd.onTouchEvent(event) 
                    || super.onTouchEvent(event));
        };

        GestureDetector.SimpleOnGestureListener sogl = new GestureDetector.SimpleOnGestureListener() {

            public boolean onDown(MotionEvent event) {

                  return true;
            }
            public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY) {

                   if (event1.getRawX() > event2.getRawX() && StrictMath.abs(event1.getRawY()-event2.getRawY())<100) {
                      mWebView.loadUrl("file:///android_asset/2.html");
                   } else if(event1.getRawX() < event2.getRawX() && StrictMath.abs(event1.getRawY()-event2.getRawY())<100){
                       mWebView.loadUrl("file:///android_asset/1.html");
                   } else {

                   }
                   return true;
            }
        };
    }
}

任何帮助将不胜感激。谢谢!

【问题讨论】:

  • 不确定这是否对您有任何帮助,但在从放置在 WebView 上的视图中获取触摸事件之前,我遇到了一个问题。这阻止了 WebView 接收任何输入。设置 mWebView.requestFocus(View.FOCUS_DOWN);以某种方式修复它。
  • 不适合我..!! :-(
  • 使用 viewpager 来滚动不同的内容,而不是 html 滚动.. 这不是一个解决方案,但它只是一个选项..

标签: android android-webview gesture touch-event


【解决方案1】:

尝试像这样使用两个参数的构造函数:

public MyWebView(Context context, AttributeSet attrs) {
    super(context, attrs);
    gd = new GestureDetector(context, sogl);
}

【讨论】:

  • 这就破案了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-13
  • 1970-01-01
  • 2010-12-29
  • 1970-01-01
相关资源
最近更新 更多