1. 在MainActivity中添加方法
/** * 以下的几个方法用来,让fragment能够监听touch事件 */ private ArrayList<MyOnTouchListener> onTouchListeners = new ArrayList<MyOnTouchListener>( 10); @Override public boolean dispatchTouchEvent(MotionEvent ev) { for (MyOnTouchListener listener : onTouchListeners) { listener.onTouch(ev); } return super.dispatchTouchEvent(ev); } public void registerMyOnTouchListener(MyOnTouchListener myOnTouchListener) { onTouchListeners.add(myOnTouchListener); } public void unregisterMyOnTouchListener(MyOnTouchListener myOnTouchListener) { onTouchListeners.remove(myOnTouchListener); } public interface MyOnTouchListener { public boolean onTouch(MotionEvent ev); } 2. 在Fragment中添加逻辑事件 MainActivity.MyOnTouchListener myOnTouchListener; private GestureDetector mGestureDetector; mGestureDetector = new GestureDetector(getActivity(), new GestureDetector.SimpleOnGestureListener()); myOnTouchListener = new MainActivity.MyOnTouchListener() { @Override public boolean onTouch(MotionEvent ev) { boolean result = mGestureDetector.onTouchEvent(ev); float curY = 0; switch (ev.getAction() & MotionEvent.ACTION_MASK){ case MotionEvent.ACTION_DOWN: prevY = ev.getY(); return true; case MotionEvent.ACTION_UP: curY = ev.getY(); if(curY - prevY < -10){ if(user_info_layout.getVisibility() == View.VISIBLE){ user_info_bg.setVisibility(View.GONE); Animation hideAnim = AnimationUtils.loadAnimation(getActivity(),R.anim.activity_out); hideAnim.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { user_info_layout.setVisibility(View.GONE); } @Override public void onAnimationRepeat(Animation animation) { } }); user_info_layout.startAnimation(hideAnim); } return true; } } return result; } }; ((MainActivity) getActivity()).registerMyOnTouchListener(myOnTouchListener);