您好,登錄后才能下訂單哦!
前言
大家應該都知道,在Android中,我們對于View進行模擬點擊事件,很容易,比如調用View.performClick
即可。
但是有些時候,我們想要更加精細的點擊,比如View的某一區域或者某一點進行點擊。比如下面的例子。
上面是一個WebView加載了一個視頻,我們必須手動點一下播放按鈕才能讓視頻播放,當然我們想要的最好是如下的自動播放效果(進入界面后,自動播放視頻)
當然方法有很多,比如通過javascript調用視頻元素的click事件。在這里我們暫不對該方法進行細究。本文旨在提供一種解決問題的可行方法。
其實我們可以通過View.dispatchTouchEvent
就能解決,因為一個click事件可以理解成一個Action_down和一個Action_up MotionEvent的組合,所以實現起來如下即可。
private fun simulateTouchEvent(view: View, x: Float, y: Float) { val downTime = SystemClock.uptimeMillis() val eventTime = SystemClock.uptimeMillis() + 100 val metaState = 0 val motionEvent = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_DOWN, x, y, metaState) view.dispatchTouchEvent(motionEvent) val upEvent = MotionEvent.obtain(downTime + 1000, eventTime + 1000, MotionEvent.ACTION_UP, x,y, metaState) view.dispatchTouchEvent(upEvent) }
關于坐標位置的選擇,仔細分析你會發現,上面的視頻的播放按鈕其實是有特點的,播放按鈕始終處于WebView的中心,即模擬的點擊可以是WebView.getWidth/2
和WebView.height/2
這個點。
為了便于測試和驗證模擬事件的成功,我們可以增加OnTouchListener進行驗證,如下代碼
webview?.setOnTouchListener { v, event -> debugMessage("onTouchListener x=${event.x};y=${event.y}") false }
對于例子中的何時出發模擬事件,我們可以在WebView網頁加載完成的時候實現,即
webview?.webViewClient = object : WebViewClient() { override fun onPageFinished(view: WebView?, url: String?) { super.onPageFinished(view, url) webview?.post { webview?.let { simulateTouchEvent(it, it.width / 2f, it.height / 2f) } } } }
基于坐標對View進行模擬點擊的代碼示例完整版,請訪問 https://github.com/androidyue/SimulateViewClickByXandY 或者通過本地下載。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。