2013-12-18 2 views
1

Android에서 MotionEvent에 대한 질문이 있습니다. iframe이 있고 iframe에있는 Image/Button을 클릭해야하기 때문에 Webview에 "Click"을 보내려고합니다. 그래서 iframe의 내용을 제어 할 수 없기 때문에 당신은 할 수 없습니다.Android : webview로 MotionEvent.obtain이 작동하지 않습니다.

내 코드 :

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

웹보기가 URL을로드하지만, 코드가 그것을 클릭하지 않습니다. webView를 클릭하면 onTouch 이벤트가 발생합니다.

도와주세요.

독일 최고의 인사말 양식.

답변

1

simulateDoubleTapEvent() 메서드에 webview 인수를 전달하고 디스패치하는 데 사용합니다.

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); 
} 
+0

감사합니다 !!!! 그것은 작동합니다! :) – user3108818