Fragmentでタッチイベントを監視する方法

2455 ワード

お久しぶりですが、今日はFragmentを傍受するタッチイベントをお送りします.もし皆さんがもっと良いメカニズムがあれば、コメントを歓迎します.
私たちのactivityにはonTouchEventの方法があり、タッチイベントの傍受を実現することができることはよく知られています.
    activity 
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return super.onTouchEvent(event);
    }

しかしFragmentでは、この方法はありません.もし私たちがfragmentでタッチイベントを傍受したいなら、どのように実現すればいいのでしょうか.私の方法は、自分でタッチイベントの配布を実現することです.まずインタフェースを定義します
public interface MyOnTouchListener {
        public boolean onTouch(MotionEvent ev);
    }

リストストレージリストをもう一つ作ろう
private ArrayList onTouchListeners = new ArrayList(
            10);

登録、破棄、配布を自分で実現
   fragment , 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では、リスナーを初期化し、activityに登録し、リスナーでジェスチャー動作をリスニングします.
        onTouchListener = new MusicActivity.MyOnTouchListener() {
            @Override
            public boolean onTouch(MotionEvent ev) {
                gestureDetector.onTouchEvent(ev);
                return false;
            }
        };
        ((MusicActivity) getActivity()).registerMyOnTouchListener(onTouchListener);

みんなが共に進歩することを望んで、最近会社は比較的に忙しくて、簡書は週末に整理して整理しなければなりません.(でも週末も残業するかも…)
著者:Anderson大サイズスラグ
リンク:http://www.jianshu.com/p/3b20bce9bdbc
出典:簡書
著作権は作者の所有である.商業転載は著者に連絡して許可を得てください.非商業転載は出典を明記してください.