1. 程式人生 > >自定義View新增點選事件

自定義View新增點選事件

最近一直在學習自定義控制元件

越學習越覺得自定義控制元件厲害。也越發的想掌握其原理。

雖然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()
            var 
y = event.getY() if (x > rectLeft && x < rectRight && y < rectBottom && y > rectTop) { mHomoViewClick?.onViewCilik() }else{ } } } return true//自己處理!!!!!!! }