Fragment設置GestureDetector滑動監聽(完美解決方案)

原文摘自:http://www.apkbus.com/android-78656-1-1.html


以下操作步驟將幫助大家在使用FragmentActivity時使Fragment能觸發到滑動事件:

1、在主activity(如MainContainerActivity)中設置一個接口(直接添加如下方法):

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實現OnGestureListener接口並實現onFling方法,定義一個手勢對象private GestureDetector detector,綁定該對象到Fragment,在Fragment的onCreateView中實例化主activity的接口即可實現調用Fragment的onFling方法。

Fragment中具體代碼如下:


import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.view.View;

public class ScanDetailsEditFragment extends MyFragment implements
		TabContentFactory, OnGestureListener {
	// 滑動手勢
	private GestureDetector detector;


	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		//to-do
		final GestureDetector mGestureDetector = new GestureDetector(
				getActivity(), this);
		MainContainerActivity.MyOnTouchListener myOnTouchListener = new MainContainerActivity.MyOnTouchListener() {
			@Override
			public boolean onTouch(MotionEvent ev) {
				boolean result = mGestureDetector.onTouchEvent(ev);
				return result;
			}
		};

		((MainContainerActivity) getActivity())
				.registerMyOnTouchListener(myOnTouchListener);
		return view;
	}




	public void flingLeft() {//自定義方法:處理向左滑動事件

	}

	public void flingRight() {//自定義方法:處理向右滑動事件

	}



	@Override
	public boolean onDown(MotionEvent arg0) {
		return false;
	}

	@Override
	public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
			float velocityY) {
		try {
			if (e1.getX() - e2.getX() < -89) {
				flingLeft();
				return true;
			} else if (e1.getX() - e2.getX() > 89) {
				flingRight();
				return true;
			}
		} catch (Exception e) {
		}
		return false;
	}

	@Override
	public void onLongPress(MotionEvent e) {
	}

	@Override
	public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
			float distanceY) {
		return false;
	}

	@Override
	public void onShowPress(MotionEvent e) {
	}

	@Override
	public boolean onSingleTapUp(MotionEvent e) {
		return false;
	}

}


發佈了105 篇原創文章 · 獲贊 18 · 訪問量 65萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章