package com.laili.mytabhost;
import android.app.Activity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.LayoutAnimationController;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TabHost;
import android.widget.TextView;
public class TestTabHostActivity extends Activity implements OnClickListener {
private TabHost tabHost;
private Button nextBtn_1;
private Button nextBtn_2;
private Button nextBtn_3;
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;
int currentView = 0;
private static int maxTabIndex = 3;
private GestureDetector gestureDetector;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initView();
}
private void initView() {
tabHost=(TabHost)findViewById(R.id.TabHost01);
tabHost.setup();
tabHost.addTab(tabHost.newTabSpec("tab1").setContent(R.id.LinearLayout1)
.setIndicator(getTabView(R.drawable.ic_launcher,"会话",R.layout.tab_view)));
tabHost.addTab(tabHost.newTabSpec("tab2").setContent(R.id.LinearLayout2)
.setIndicator(getTabView(R.drawable.ic_launcher, "好友", R.layout.tab_view)));
tabHost.addTab(tabHost.newTabSpec("tab3").setContent(R.id.LinearLayout3)
.setIndicator(getTabView(R.drawable.ic_launcher, "名片", R.layout.tab_view)));
tabHost.addTab(tabHost.newTabSpec("tab4").setContent(R.id.LinearLayout4)
.setIndicator(getTabView(R.drawable.ic_launcher, "更多", R.layout.tab_view)));
tabHost.setCurrentTab(1);
tabHost.setSelected(false);
nextBtn_1 = (Button) findViewById(R.id.jump2next_btn_1);
nextBtn_2 = (Button) findViewById(R.id.jump2next_btn_2);
nextBtn_3 = (Button) findViewById(R.id.jump2next_btn_3);
nextBtn_1.setOnClickListener(this);
nextBtn_2.setOnClickListener(this);
nextBtn_3.setOnClickListener(this);
gestureDetector = new GestureDetector(new MyGestureListener());
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
gestureDetector.onTouchEvent(ev);
return super.dispatchTouchEvent(ev);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){
setContentView(R.layout.main);
System.out.println("land");
}
if(newConfig.orientation==Configuration.ORIENTATION_PORTRAIT){
setContentView(R.layout.main);
System.out.println("port");
}
}
/**
* 获得TabHost上填充tab的View
* @param icon
* @param label
* @param viewId
* @return
*/
private View getTabView(int icon, String label, int viewId) {
View localView = LayoutInflater.from(this).inflate(viewId, null);
ImageView iconView = (ImageView) localView.findViewById(R.id.icon);
TextView labelView = (TextView) localView.findViewById(R.id.label);
iconView.setBackgroundResource(icon);
labelView.setText(label);
return localView;
}
@Override
public void onClick(View v) {
System.out.println(tabHost.getChildCount());
if (tabHost.getCurrentTab() == maxTabIndex) {
tabHost.setCurrentTab(0);
} else {
tabHost.setCurrentTab(tabHost.getCurrentTab() + 1);
}
}
private class MyGestureListener extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
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) {
e.printStackTrace();
}
return false;
}
} // MyGestureListener
}
分享到:
相关推荐
使用了自定义button,自定义tabhost使用了不同默认的上标签切换页面
android--解决方案--自定义tabhost(动态添加选项+带自动水平滑动选项卡+手势切换选项卡及内容功能)
自定义TabHost,实现标签在页面底部,并且标签选项卡可以显示图标和文件
自定义tabhost,实现新浪微博效果
自定义TabHost实现背景图片随选项卡切换滑动效果
tabhost,tab控制按钮图片文字切换,自己可以任意定义变更。
Android系统自带的TabHost控件很难看,这是一个自定义TabHost例子,显示在底部,类似于微博下面的Tab选项卡
Android TabHost实现屏幕UI窗口的TAB切换功能,实现的过程:声明TabHost对象、取得TabHost对象,为TabHost添加标签,新建一个newTabSpec(newTabSpec),设置其标签和图标(setIndicator),设置内容(setContent),然后...
自定义tabhost实现activity 的跳转 界面比较简单 但功能都实现了
自定义TabHost 图片在左文字在右 可以结合修改为新的布局
点击TabHost的tab页,切换后更换tab背景颜色
自定义TabHost,一个简单的的例子,通过嵌套来改变TabHost的位置
自定义TabHost各种经典实现,突破了传统的固定模式,内有word文档代码详解!
自定义Tabhost实现滑动切换,利用GridView,listView实现自定义布局
android的自定义TabHost,界面还是不错的哦,漂亮。
几种tab切换模式,tabhost模式代码分享
自定义Tabhost的样式(不是按钮),ViewPager的滑动,Fragment三者的结合
Android裡提供了TabHost,讓開發人員可以製做Tab版型;但是預設的樣式一點都不討喜。如果要自己重新設計版面其實也不太難,可直接运行,自定义的tabhost样式
很多情况下,我们需要用到标签,类似于微末下面的标签效果,直接使用系统默认的往往不能满足项目的需求,就需要我们自定义一个TabHost。下面我把在项目的实现的效果分享给大家,希望能帮助需要的朋友!