前言
開發(fā)過程中共屈,經(jīng)常需要利用代碼去觸發(fā)View的點擊動作庆亡,通常也只需要調(diào)用View.performClick()就能實現(xiàn)。但是有時候卻不管用懒震,通過源碼可以發(fā)現(xiàn),這個View只能觸發(fā)自己所設(shè)置的點擊事件的回調(diào)嗤详,對于涉及多個View層級的ViewGoup組合就會不起作用个扰。源碼截圖如下:
View.performClick源碼
如何實現(xiàn)這種情況下的點擊動作呢?----可以通過Activity.dispatchTouchEvent()模擬分發(fā)觸摸事件就能實現(xiàn)断楷!
解決方案
利用代碼模擬產(chǎn)生ACTION_DOWN和ACTION_UP觸摸事件觸發(fā)View的點擊效果:
activity.let {
val cl = arrayOf(100f,100f)//點擊坐標
//模擬生成ACTION_DOWN事件
val upt = SystemClock.uptimeMillis()
val ev = MotionEvent.obtain(upt, upt, MotionEvent.ACTION_DOWN, cl[0], cl[1], 0)
it.dispatchTouchEvent(ev)
//模擬生成ACTION_UP事件
it.dispatchTouchEvent(MotionEvent.obtain(ev).also { it.action = MotionEvent.ACTION_UP })
}
ps: 獲取View的坐標可以使用View.getLocationInWindow()函數(shù)或者View.getChildVisibleRect()函數(shù)
如果本文對你有幫助就點個贊支持下吧~~~