1. onTouchListener(); //捕捉touch事件,好比說onDownide
須要將可滑動的控件加上兩個方法:(1)view.setOnTouchListener(); //實現能夠touchpost
(2) view.setLongClickAble(); //若是不加這個方法,這個view只會接受onDown()點擊事件。onFling() onScroll()等方法不接受繼承
此方法須要注意,其目的是接收控件的touch事件,哪須要就要在哪加上。好比說最外面的Layout,中間的ListView,尤爲注意當有ScrollView時必定要給它也加上這個方法,不然ScrollView裏面的控件會不接受onFling()方法。事件
2. GestureDetector //手勢識別ci
其中咱們要使用的是繼承了GestureDetector.onDoubleTapLisener和GestureDetector.OnGestureListener的GestureDetector.SimpleOnGestureListener。其中重寫onFling()方法。此方法是在快速滑動屏幕時纔會執行,正好符合咱們的功能。get
中間咱們要把自定義的GestureDetector類與控件的onTouch()方法關聯起來。在Activity中實現View.OnTouchListener(),重寫它的方法:it
GestureDetector detector = new GestureDetector(new MySimpleGestureDetector());io
public void onTouch(View view, MontionEvent event){event
return detector.onTouchEvent(event); //關聯class
}
方法體以下:附註釋
public class MySimpleGestureDetector extends GestureDetector.SimpleOnGestureListener {
private static final int MIN_DISTANCE = 100; //最小距離
private static final int MIN_VELOCITY = 100; //最小滑動速率
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
if (Math.abs(velocityX) > MIN_VELOCITY) {
if ((e2.getX() - e1.getX()) > MIN_DISTANCE) { //向右滑動
TabActivity.flingRight();
} else if ((e1.getX() - e2.getX()) > MIN_DISTANCE) { //向左滑動
TabActivity.flingLeft();
}
}
return super.onFling(e1, e2, velocityX, velocityY);
}
}
3. 此時全部支持滑動的控件都加上了touch監聽事件,並關聯到自定義的SimpleGestureDetector裏。而且在自定義的SimpleGestureDetector中重寫的onFling()方法,處理了左右快速滑動操做。滑動最小距離爲100px,X軸上滑動最小速率爲100px/s。因此最後一步就是在你的TabActivity中處理左右滑動就能夠了。附代碼:
public static void flingLeft() {
int currentTab = tabHost.getCurrentTab();
if (currentTab != 0) {
currentTab--;
switchTab(currentTab);
}
}
public static void flingRight() {
int currentTab = tabHost.getCurrentTab();
if (currentTab != tabHost.getTabWidget().getChildCount()) {
currentTab++;
switchTab(currentTab);
}
}
private static void switchTab(final int toTab) {
new Thread(new Runnable() {
@Override
public void run() {
tabHost.post(new Runnable() {
@Override
public void run() {
tabHost.setCurrentTab(toTab);
}
});
}
}).start();
}
這樣一個支持左右滑動切換界面的Tab就作好了。