Android如何基于坐標(biāo)對View進(jìn)行模擬點(diǎn)擊事件詳解
前言
大家應(yīng)該都知道,在Android中,我們對于View進(jìn)行模擬點(diǎn)擊事件,很容易,比如調(diào)用View.performClick
即可。
但是有些時(shí)候,我們想要更加精細(xì)的點(diǎn)擊,比如View的某一區(qū)域或者某一點(diǎn)進(jìn)行點(diǎn)擊。比如下面的例子。
上面是一個(gè)WebView加載了一個(gè)視頻,我們必須手動點(diǎn)一下播放按鈕才能讓視頻播放,當(dāng)然我們想要的最好是如下的自動播放效果(進(jìn)入界面后,自動播放視頻)
當(dāng)然方法有很多,比如通過javascript調(diào)用視頻元素的click事件。在這里我們暫不對該方法進(jìn)行細(xì)究。本文旨在提供一種解決問題的可行方法。
其實(shí)我們可以通過View.dispatchTouchEvent
就能解決,因?yàn)橐粋€(gè)click事件可以理解成一個(gè)Action_down和一個(gè)Action_up MotionEvent的組合,所以實(shí)現(xiàn)起來如下即可。
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) }
關(guān)于坐標(biāo)位置的選擇,仔細(xì)分析你會發(fā)現(xiàn),上面的視頻的播放按鈕其實(shí)是有特點(diǎn)的,播放按鈕始終處于WebView的中心,即模擬的點(diǎn)擊可以是WebView.getWidth/2
和WebView.height/2
這個(gè)點(diǎn)。
為了便于測試和驗(yàn)證模擬事件的成功,我們可以增加OnTouchListener進(jìn)行驗(yàn)證,如下代碼
webview?.setOnTouchListener { v, event -> debugMessage("onTouchListener x=${event.x};y=${event.y}") false }
對于例子中的何時(shí)出發(fā)模擬事件,我們可以在WebView網(wǎng)頁加載完成的時(shí)候?qū)崿F(xiàn),即
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) } } } }
基于坐標(biāo)對View進(jìn)行模擬點(diǎn)擊的代碼示例完整版,請?jiān)L問 https://github.com/androidyue/SimulateViewClickByXandY 或者通過本地下載。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
Android編程經(jīng)典代碼集錦(復(fù)制,粘貼,瀏覽器調(diào)用,Toast顯示,自定義Dialog等)
這篇文章主要介紹了Android編程經(jīng)典代碼集錦,包括Android的復(fù)制,粘貼,瀏覽器調(diào)用,Toast顯示,自定義Dialog等實(shí)現(xiàn)技巧,非常簡單實(shí)用,需要的朋友可以參考下2016-01-01Core Animation一些Demo總結(jié) (動態(tài)切換圖片、大轉(zhuǎn)盤、圖片折疊、進(jìn)度條等動畫效果)
這篇文章主要介紹了Core Animation一些Demo總結(jié) (動態(tài)切換圖片、大轉(zhuǎn)盤、圖片折疊、進(jìn)度條等動畫效果)的相關(guān)資料,需要的朋友可以參考下2016-02-02Android點(diǎn)擊事件之多點(diǎn)觸摸與手勢識別的實(shí)現(xiàn)
這篇文章主要介紹了Android點(diǎn)擊事件之多點(diǎn)觸摸與手勢識別的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05Android使用IntentService進(jìn)行apk更新示例代碼
這篇文章主要介紹了Android使用IntentService進(jìn)行apk更新示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-01-01Android利用ScaleTransition實(shí)現(xiàn)吹氣球動畫
這篇文章主要為大家介紹了如何將利用ScaleTransition實(shí)現(xiàn)一個(gè)吹氣球的動畫,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2022-04-04Android仿美團(tuán)網(wǎng)、大眾點(diǎn)評購買框懸浮效果修改版
這篇文章主要為大家詳細(xì)介紹了Android仿美團(tuán)網(wǎng)、大眾點(diǎn)評購買框懸浮效果的修改版,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02