国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android如何基于坐標(biāo)對View進(jìn)行模擬點(diǎn)擊事件詳解

2019-10-22 18:14:22
字體:
供稿:網(wǎng)友

前言

大家應(yīng)該都知道,在Android中,我們對于View進(jìn)行模擬點(diǎn)擊事件,很容易,比如調(diào)用View.performClick即可。

但是有些時(shí)候,我們想要更加精細(xì)的點(diǎn)擊,比如View的某一區(qū)域或者某一點(diǎn)進(jìn)行點(diǎn)擊。比如下面的例子。

android,view點(diǎn)擊事件,view,坐標(biāo),事件

上面是一個(gè)WebView加載了一個(gè)視頻,我們必須手動(dòng)點(diǎn)一下播放按鈕才能讓視頻播放,當(dāng)然我們想要的最好是如下的自動(dòng)播放效果(進(jìn)入界面后,自動(dòng)播放視頻)

android,view點(diǎn)擊事件,view,坐標(biāo),事件

當(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/2WebView.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à)值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網(wǎng)的支持。


注:相關(guān)教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 城固县| 托克逊县| 邓州市| 乡城县| 甘南县| 璧山县| 灌南县| 南和县| 嫩江县| 肥乡县| 西藏| 乐东| 绍兴县| 同心县| 塔河县| 丰都县| 西吉县| 赣州市| 麻江县| 通化县| 抚州市| 建阳市| 株洲市| 清水县| 长春市| 孙吴县| 高清| 邵阳县| 邻水| 绥阳县| 清新县| 巩义市| 白山市| 广元市| 通渭县| 金坛市| 万安县| 永康市| 临猗县| 遂昌县| 仪征市|