【问题标题】:Android: MotionEvent.obtain with webview does not workAndroid:带有 webview 的 MotionEvent.obtain 不起作用
【发布时间】:2014-01-06 19:06:42
【问题描述】:

我对 Android 中的 MotionEvent 有疑问。我想向 Webview 发送“点击”,因为有一个 iframe,我必须单击 iframe 中的一个图像/按钮。所以我不能你 js 因为我无法控制 iframe 的内容。

我的代码:

private void simulateDoubleTapEvent(int action)
{
    long downTime = SystemClock.uptimeMillis();
    long eventTime = SystemClock.uptimeMillis() + 100;
    float x = 35.407104f;
    float y = 378.52066f;
    // List of meta states found here: developer.android.com/reference/android/view/KeyEvent.html#getMetaState()
    int metaState = 0;
    MotionEvent me = MotionEvent.obtain(
        downTime, 
        eventTime, 
        action, 
        x, 
        y, 
        metaState
    );
    dispatchTouchEvent(me);
}

在 onCreate 中:

webview2.setOnTouchListener(new OnTouchListener() {
           @Override
           public boolean onTouch(View v, MotionEvent event) {
              int action = event.getAction();
               float x = event.getX();
               float y = event.getY();
                         event.getMetaState();
               Log.v("ON_TOUCH", "Action = " + action + " View:" + v.toString());
               Log.v("ON_TOUCH", "X = " + x + "Y = " + y);


           return false;
           }
   });
   webview2.setWebViewClient(new WebViewClient() {
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) 
    { view.loadUrl(url); return true; }
    public void onPageFinished(WebView view, String url) {
        Log.w("webview2","Load");

        simulateDoubleTapEvent(0);
                simulateDoubleTapEvent(1);
    }
   });

webView 加载了 Url,但是代码没有点击它。如果我单击 webView,则会触发 onTouch 事件。

你能帮帮我吗?

来自德国的问候。

【问题讨论】:

    标签: android webview touch-event motionevent


    【解决方案1】:

    将 webview 作为参数传递给您的 simulationDoubleTapEvent() 方法并将其用于调度。

    private void simulateDoubleTapEvent(WebView view, int action)
    {
        long downTime = SystemClock.uptimeMillis();
        long eventTime = SystemClock.uptimeMillis() + 100;
        float x = 35.407104f;
        float y = 378.52066f;
        // List of meta states found here: developer.android.com/reference/android/view/KeyEvent.html#getMetaState()
        int metaState = 0;
        MotionEvent me = MotionEvent.obtain(
            downTime, 
            eventTime, 
            action, 
            x, 
            y, 
            metaState
        );
        view.dispatchTouchEvent(me);
    }
    

    【讨论】:

      猜你喜欢
      • 2017-11-07
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 2012-12-29
      • 2011-06-27
      • 2018-11-09
      • 2018-11-14
      • 2015-03-22
      相关资源
      最近更新 更多