前言
开发过程中,经常需要利用代码去触发View的点击动作,通常也只需要调用View.performClick()就能实现。但是有时候却不管用,通过源码可以发现,这个View只能触发自己所设置的点击事件的回调,对于涉及多个View层级的ViewGoup组合就会不起作用。源码截图如下:
View.performClick源码如何实现这种情况下的点击动作呢?----可以通过Activity.dispatchTouchEvent()模拟分发触摸事件就能实现!
解决方案
利用代码模拟产生ACTION_DOWN和ACTION_UP触摸事件触发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()函数或者View.getChildVisibleRect()函数
如果本文对你有帮助就点个赞支持下吧~~~
网友评论