在Android中处理WebView内的触摸事件 [英] Handle Touch Events inside WebView in android

查看:144
本文介绍了在Android中处理WebView内的触摸事件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I had created WebView that loads html files from the asset folder. Now when i am going to put GestureDetecter in that WebView it stops working ScrollView & links inside html page. but when i removes GestureDetecter both ScrollView & links works fine.

以下是我的完整代码,

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

(I have used two html files 1.html & 2.html, you can use any html files instead of it which can allows scrolling and put both files into asset folder)

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;
            }
        };
    }
}

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

Any Help would be greatly appreciated. Thanks!

推荐答案

尝试使用两个参数构造函数,如下所示:

try use a two arguments constructor like this:

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

这篇关于在Android中处理WebView内的触摸事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆