自定義View新增點選事件
阿新 • • 發佈:2019-01-03
最近一直在學習自定義控制元件
越學習越覺得自定義控制元件厲害。也越發的想掌握其原理。
雖然GitHub上各種各樣的輪子都有,但是萬一沒有呢?
依靠輪子是不靠譜的!!!
自己掌握原理,才是最靠譜的!!!
當我用自定義控制元件畫出來想要的效果時,突發奇想。
點了一下,發現沒反應。於是想設定監聽事件。
我的畫的控制元件充滿螢幕,我只是想點選區域性。但是直接設定監聽的話,監聽的是整個控制元件。
一時間有點懵逼。於是Google找思路。
大致的思路如下:
1.自定義點選事件介面
//自定義點選事件介面 interface HomeViewClick { fun onViewCilik() }
2.建立,設定自定義的點選監聽的方法
//設定自定義的點選事件監聽 fun setOnHomeViewClick(homoViewClick: HomeViewClick) { mHomoViewClick = homoViewClick }
3.重寫onTouchEvent()方法
需要注意的是:返回true(表示控制元件自己處理觸控事件),返回false則是交給父控制元件處理。
當返回false時,MotionEvent.ACTION_MOVE和MotionEvent.ACTION_UP都不會觸發
4.根據MotionEvent判斷使用者的動作
MotionEvent.ACTION_DOWN 》》》 按下
MotionEvent.ACTION_MOVE 》》》 移動
MotionEvent.ACTION_UP 》》》 擡起
5.當用戶擡起手指時,判斷其座標是否在指定範圍內
6.在指定範圍內時,用介面例項呼叫介面中的方法
override fun onTouchEvent(event: MotionEvent): Boolean { when (event.action) { //手指擡起 MotionEvent.ACTION_UP -> { distanceY = 0f this.invalidate()//重新繪製 var x = event.getX() vary = event.getY() if (x > rectLeft && x < rectRight && y < rectBottom && y > rectTop) { mHomoViewClick?.onViewCilik() }else{ } } } return true//自己處理!!!!!!! }