`
zhelong111
  • 浏览: 188294 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

自定义TabHost之手势切换Tab视图(不带动画)

 
阅读更多
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
}










分享到:
评论
1 楼 s21109 2012-05-16  
 

相关推荐

    android使用了自定义button自定义tabHost切换页面Demo

    在“自定义tabhost使用了不同默认的上标签切换页面”这一描述中,我们可以理解为每个Tab可能展示不同的内容,而这些内容可能是通过不同的Activity或Fragment来实现的。当用户点击不同的Tab时,TabHost会根据预设的...

    自定义tabhost(动态添加选项+带自动水平滑动选项卡+手势切换选项卡及内容功能)

    然而,标准的TabHost功能有限,往往需要进行自定义以满足更复杂的需求,如动态添加选项、自动水平滑动以及手势切换选项卡。下面我们将深入探讨如何实现这样的自定义TabHost。 一、自定义TabHost的基本原理 自定义...

    自定义TabHost例子,类似于微博下面的Tab选项卡

    5. **动画效果**:为了增加用户体验,可以为Tab切换添加过渡动画,例如淡入淡出或者滑动效果。 6. **使用Fragment**:在现代Android开发中,通常推荐使用Fragment替换Activity,因为它们更容易管理和适应屏幕旋转等...

    自定义TabHost最简Demo源代码

    在Android开发中,`TabHost`是一个非常重要的组件,它用于创建带有多个选项卡的界面,每个选项卡对应一个不同的活动或视图。本示例是关于如何自定义`TabHost`,使其满足特定需求,如将标签置于页面底部,并且能够...

    android自定义tabhost

    3. **切换事件监听**:通过`TabHost.OnTabChangeListener`接口,我们可以监听用户切换Tab的操作,以便进行相应的逻辑处理,如刷新当前页面内容。 4. **嵌套Fragment**:在新的Android版本中,使用Fragment来管理每...

    自定义TabHost实现

    在本教程中,我们将深入探讨如何自定义`TabHost`,实现图片和文字的切换,以及如何根据需求自由定义变更。 首先,我们需要了解`TabHost`的基本结构。`TabHost`由两部分组成:`TabWidget`和`FrameLayout`。`...

    android--自定义TabHost

    - **addTab()**:为TabHost添加新的Tab,指定标签名、图标以及切换到该标签时要显示的布局或Activity。 4. **实例化和使用自定义TabHost** - 在XML布局文件中声明TabHost,并根据需求配置TabWidget和FrameLayout...

    自定义TabHost实现背景图片随选项卡切换滑动效果

    在布局文件中,将自定义的TabHost作为根布局,确保背景图片位于TabHost之上。这样,当选项卡切换时,背景图片的滑动效果会与TabHost同步。 5. **编程实现**: 在Activity或Fragment中,实例化自定义的TabHost,并...

    自定义tabhost

    在Android开发中,TabHost是一个常用的组件,用于创建带有多个选项卡的应用界面。自定义TabHost可以帮助我们根据项目需求调整其样式、位置以及交互方式,从而提供更好的用户体验。本篇文章将详细讲解如何自定义...

    自定义tabhost实现activity 的跳转

    在Android SDK中,TabHost提供了默认的实现,但我们常常需要对其进行自定义以满足特定需求,例如更改标签样式、添加动画效果等。 1. **创建TabHost实例** 在XML布局文件中,你需要创建一个TabHost,并为其设置ID为...

    android的自定义TabHost

    然后添加TabWidget和FrameLayout,接着用`TabHost.TabSpec`来定义每个标签,包括标签的文本、图标以及与之关联的活动或视图。最后,调用`setup()`方法来启动TabHost。 ```java TabHost tabHost = (TabHost) ...

    自定义TabHost经典案例

    2. **选项卡切换动画**:可以添加自定义动画效果,使选项卡在切换时更具有视觉吸引力。 3. **选项卡内容**:每个选项卡的内容可以是任何View,如Fragment、Activity或自定义ViewGroup。这为我们提供了丰富的可能性...

    android自定义tabhost样式

    默认情况下,TabHost的样式可能不能满足所有设计需求,因此我们需要自定义其外观和行为。 1. 创建布局资源 在res/layout目录下,创建一个新的XML布局文件,例如`custom_tab_host.xml`。在这个文件中,我们可以...

    【Android】底部、自定义Tabhost的应用

    在Android应用开发中,TabHost是一个非常重要的组件,它允许我们创建带有标签切换的界面,类似于许多移动应用的底部导航栏。默认的TabHost样式可能不符合所有开发者的设计需求,因此自定义TabHost就显得尤为关键。这...

    TabHost底部tab切换

    3. **设置自定义视图**:通过`TabSpec.setIndicator()`使用自定义的`TabView`替换默认的标签指示器。 **注意事项:** 1. `TabHost`在新版本的Android SDK中已经被推荐替换为`BottomNavigationView`或者`ViewPager`+...

    Android TabHost实现屏幕UI窗口的TAB切换功能.rar

    Android TabHost实现屏幕UI窗口的TAB切换功能,实现的过程:声明TabHost对象、取得TabHost对象,为TabHost添加标签,新建一个newTabSpec(newTabSpec),设置其标签和图标(setIndicator),设置内容(setContent),然后...

    android TabHost自定义选项卡

    这个组件在早期的Android版本中广泛使用,为用户提供了一种便捷的方式来组织和切换不同的视图或活动。本文将深入探讨如何在Android中自定义TabHost,以简化开发过程并提高效率。 首先,我们要理解TabHost的基本结构...

    tab切换之tabhost模式

    在Android应用开发中,TabHost是一种常见的用于实现标签页切换的组件,它允许开发者在一个Activity中展示多个Fragments或者Views,通过不同的标签页来切换显示不同的内容。本篇将深入探讨TabHost的工作原理、实现...

    TabHost切换动画及基本原理

    本资源主要关注`TabHost`的切换动画及其基本工作原理。 首先,`TabHost`是Android提供的一个容器,它允许我们在一个活动中展示多个`Fragment`或`Activity`,每个`Tab`对应一个视图。在早期的Android版本中,`...

    自定义TabHost 图片在左文字在右

    在Android开发中,`TabHost` 是一个非常重要的组件,用于创建带有标签页的应用界面。在传统的`TabHost`使用中,标签页通常显示为文字,但有时我们可能需要更个性化的布局,例如图片在左,文字在右。本教程将深入探讨...

Global site tag (gtag.js) - Google Analytics