1.首先看一下我們的項目目錄結構
2.需要TableHost和TabSpec組件,這是HomeActivity類,它負責分發、跳轉
package com.xiaobo.androidui;
import android.app.TabActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;
public class HomeActivity extends TabActivity {
private GestureDetector gestureDetector;
/** 記錄當前分頁ID */
private int currentView = 0;
private static int maxTabIndex = 2;
// *********************************
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
View.OnTouchListener gestureListener;
TabHost tabHost;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initTabHost();
gestureDetector = new GestureDetector(new MyGestureDetector());
gestureListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) {
return true;
}
return false;
}
};
}
private void initTabHost() {
// 獲取TabHost組件
tabHost = this.getTabHost();
// 新建一個標籤頁
TabSpec firstTabSpec = tabHost.newTabSpec("First")
.setIndicator("First");
// 給標籤頁設置內容
firstTabSpec.setContent(new Intent(HomeActivity.this,
FirstActivity.class));
tabHost.addTab(firstTabSpec);
// 新建一個標籤頁
TabSpec secondTabSpec = tabHost.newTabSpec("Second").setIndicator(
"Second");
// 給標籤頁設置內容
secondTabSpec.setContent(new Intent(HomeActivity.this,
SecondActivity.class));
tabHost.addTab(secondTabSpec);
// 新建一個標籤頁
TabSpec thirdTabSpec = tabHost.newTabSpec("Third")
.setIndicator("Third");
// 給標籤頁設置內容
thirdTabSpec.setContent(new Intent(HomeActivity.this,
ThirdActivity.class));
tabHost.addTab(thirdTabSpec);
// 設置當前顯示第二頁
tabHost.setCurrentTab(1);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (gestureDetector.onTouchEvent(ev)) {
ev.setAction(MotionEvent.ACTION_CANCEL);
}
return super.dispatchTouchEvent(ev);
}
// 左右滑動剛好頁面也有滑動效果
class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
System.out.println("************");
try {
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
return false;
// right to left swipe
if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Log.i("test", "right");
if (currentView == maxTabIndex) {
currentView = 0;
} else {
currentView++;
}
tabHost.setCurrentTab(currentView);
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Log.i("test", "left");
if (currentView == 0) {
currentView = maxTabIndex;
} else {
currentView--;
}
tabHost.setCurrentTab(currentView);
}
} catch (Exception e) {
}
return false;
}
}
}
3.這是FirstActivity類,它只需配置屬於自己的佈局文件就OK了,其他的幾個Activity是一樣的
package com.xiaobo.androidui;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class FirstActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
4.這是FirstActivity的佈局文件,其他的幾個Activity的佈局文件是一樣的
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".HomeActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/first_tip" />
</RelativeLayout>
5.最後是AndroidManifest.xml配置文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xiaobo.androidui"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.xiaobo.androidui.HomeActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.xiaobo.androidui.FirstActivity"
android:label="@string/first_tip">
</activity>
<activity
android:name="com.xiaobo.androidui.SecondActivity"
android:label="@string/second_tip">
</activity>
<activity
android:name="com.xiaobo.androidui.ThirdActivity"
android:label="@string/third_tip">
</activity>
</application>
</manifest>
6.效果圖