下面是我自定義的一個控件
以下是自定義view的關鍵java代碼
//必須重寫的方法
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
//Log.d("tag", "ACTION_DOWN");
y = ev.getY();
x = ev.getX();
break;
case MotionEvent.ACTION_UP:
//Log.d("tag", "ACTION_UP");
float yTwo = ev.getY();
float xTwo = ev.getX();
//通過判斷觸摸位置與鬆開位置一致,則回調
if ((x == xTwo) && (y == yTwo)){
//回掉
if (mCallBack!=null){
//調用接口中的方法
mCallBack.callBack();
}
}
break;
}
return super.dispatchTouchEvent(ev);
}
//對外暴露一個參數爲接口類型的公有的方法,從而使調用該放法的地方實現接口
public void setListener(OnCallBcak callBcak){
this.mCallBack = callBcak;
}
//接口類型的對象
private OnCallBcak mCallBack;
//內部接口
public interface OnCallBcak{
//必須實現的方法
public void callBack();
}
在想要監聽該自定義view點擊事件的地方實現接口
代碼如下:
//通過實現接口中的方法,實現接口回掉
itemIvSortDetailTop.setListener(new ItemIvSortDetailTop.OnCallBcak() {
@Override
public void callBack() {
//點擊事件
Toast.makeText(FindSortDetailActivity.this, "我被點擊了", Toast.LENGTH_SHORT).show();
}
});