好久沒寫簡(jiǎn)書了,今日送上監(jiān)聽Fragment的觸摸事件實(shí)現(xiàn)腔寡。如果大家有更好的機(jī)制,歡迎comment掌唾。
大家都知道放前,我們的activity中有onTouchEvent方法忿磅,可以用來實(shí)現(xiàn)觸摸事件的監(jiān)聽。
activity的觸摸事件
@Override
public boolean onTouchEvent(MotionEvent event) {
return super.onTouchEvent(event);
}
但是對(duì)于Fragment凭语,其中卻沒有這個(gè)方法葱她,如果我們?cè)趂ragment中想要監(jiān)聽觸摸事件 該如何實(shí)現(xiàn)呢?
我的方法是似扔,自己實(shí)現(xiàn)觸摸事件的分發(fā)吨些。
先定義一個(gè)接口
public interface MyOnTouchListener {
public boolean onTouch(MotionEvent ev);
}
再搞一個(gè)list存儲(chǔ)listener
private ArrayList<MyOnTouchListener> onTouchListeners = new ArrayList<MyOnTouchListener>(
10);
再自己實(shí)現(xiàn)注冊(cè),與銷毀以及分發(fā)
fragment觸摸事件分發(fā)炒辉,將觸摸事件分發(fā)給每個(gè)能夠響應(yīng)的fragment
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
for (MyOnTouchListener listener : onTouchListeners) {
if(listener != null) {
listener.onTouch(ev);
}
}
return super.dispatchTouchEvent(ev);
}
public void registerMyOnTouchListener(MyOnTouchListener myOnTouchListener) {
onTouchListeners.add(myOnTouchListener);
}
public void unregisterMyOnTouchListener(MyOnTouchListener myOnTouchListener) {
onTouchListeners.remove(myOnTouchListener) ;
}
那么在fragment中 我們這樣使用即可:初始化監(jiān)聽器豪墅,然后向activity注冊(cè),同時(shí)監(jiān)聽器中監(jiān)聽手勢(shì)動(dòng)作黔寇。
onTouchListener = new MusicActivity.MyOnTouchListener() {
@Override
public boolean onTouch(MotionEvent ev) {
gestureDetector.onTouchEvent(ev);
return false;
}
};
((MusicActivity) getActivity()).registerMyOnTouchListener(onTouchListener);
希望大家共同進(jìn)步偶器,最近公司比較忙,簡(jiǎn)書得周末整理整理了啡氢。(不過周末可能也得加班..)