`

tabhost通过手势滑动切换activity

阅读更多
public class Main extends TabActivity {
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;
private GestureDetector gestureDetector;
View.OnTouchListener gestureListener;
private Animation slideLeftIn;
private Animation slideLeftOut;
private Animation slideRightIn;
private Animation slideRightOut;
private ViewFlipper viewFlipper;

int currentView = 0;
private static int maxTabIndex = 2;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TabHost tabHost = getTabHost();
tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("tab1 ")
.setContent(new Intent(this, Activity1.class)));

tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("tab2 ")
.setContent(new Intent(this, Activity2.class)));

tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("tab3 ")
.setContent(new Intent(this, Activity3.class)));
tabHost.setCurrentTab(0);
slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_left_in);
slideLeftOut = AnimationUtils
.loadAnimation(this, R.anim.slide_left_out);
slideRightIn = AnimationUtils
.loadAnimation(this, R.anim.slide_right_in);
slideRightOut = AnimationUtils.loadAnimation(this,
R.anim.slide_right_out);

gestureDetector = new GestureDetector(new MyGestureDetector());
gestureListener = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) {
return true;
}
return false;
}
};
}

class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
TabHost tabHost = getTabHost();
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) {
// nothing
}
return false;
}
}

// @Override
// public boolean onTouchEvent(MotionEvent event) {
// if (gestureDetector.onTouchEvent(event))
// return true;
// else
// return false;
// }

@Override
public boolean dispatchTouchEvent(MotionEvent event) {

if(gestureDetector.onTouchEvent(event)){
event.setAction(MotionEvent.ACTION_CANCEL);
}

return super.dispatchTouchEvent(event);

}
}



xml文件如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ImageButton
android:id="@+id/button1"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ImageButton>
<ImageButton
android:id="@+id/button2"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ImageButton>
</LinearLayout>
<TabHost
android:id="@android:id/tabhost" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout android:orientation="vertical"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<TabWidget android:id="@android:id/tabs"
android:layout_width="fill_parent" android:layout_height="wrap_content" />
<FrameLayout android:id="@android:id/tabcontent"
android:layout_width="fill_parent" android:layout_height="fill_parent" />
</LinearLayout>
</TabHost>
</LinearLayout>
分享到:
评论

相关推荐

    手势滑动切换activity

    本示例中的"手势滑动切换activity"是通过结合使用`TabHost`和`ViewPager`组件来实现的,这两种组件在Android应用设计中都有着重要的作用。 `TabHost`是Android系统提供的一个容器,它允许开发者创建带有标签页的...

    tabhost 能够通过手势滑动

    描述中的“简单的例子 能够运行流畅 是想手机一样的 通过手指左右滑动切换tabhost”进一步强调了这个功能的实际应用和效果。这意味着开发者已经成功地实现了TabHost与手势识别的结合,使得用户可以像操作智能手机主...

    tabHost滑动切换选项卡 tabHost ViewPager

    4. **关联TabHost和ViewPager**:为了实现滑动切换选项卡的效果,开发者需要监听TabHost的选中事件,并根据选中的标签改变ViewPager当前显示的页面。这通常是通过设置TabHost的OnTabChangeListener来实现的。 5. **...

    左右滑动可以切换的TabHost

    4. **处理滑动手势**: 为了使用户可以通过左右滑动切换Activity,需要监听ViewPager的滑动事件。这可以通过在ViewPager中设置OnPageChangeListener实现。当页面滑动时,更新TabLayout中的选中标签。 5. **菜单项和...

    手势控制tabhost的activity切换

    本教程将详细讲解如何通过手势控制TabHost中的Activity切换,这对于初学者来说是一份宝贵的资源。 首先,我们要理解手势识别(Gesture Recognition)在Android中的应用。Android SDK提供了一个叫做...

    Tab选项卡页面滑动切换

    通过查看和分析这些文件,开发者可以学习如何在实际项目中实现选项卡滑动切换效果,包括自定义滑动动画、响应手势事件以及优化用户体验等方面的知识。 总之,“Tab选项卡页面滑动切换”是一个功能强大且实用的UI...

    Android代码,TabHost+Fragment实现多标签页,可滑动切换

    总结,这个示例项目展示了如何在Android应用中使用FragmentActivity、TabLayout和ViewPager来实现一个功能完善的多标签页界面,同时通过手势支持平滑的滑动切换。这种方法不仅适用于API 19及以上的设备,而且符合...

    可以滑动的TabHost

    在Android开发中,`...通过这样的方式,我们可以实现一个功能完善的、可滑动切换的TabHost,提供给用户更友好的交互体验。在实际开发中,还可以根据需求进一步定制,比如添加滑动监听事件、处理页面间的数据传递等。

    ViewPager做成可滑动切换的Tabhost的效果

    在本案例中,我们将讨论如何利用`ViewPager` 实现类似`TabHost` 的滑动切换效果,但不包含`TabHost` 传统的彩色指示条。 首先,`ViewPager` 是Android Support Library的一部分,它提供了一个可以水平滑动的视图...

    安卓Android源码——ViewPager和Tabhost结合,可滑动的tabhost.zip

    在安卓开发中,`ViewPager` 和 `TabHost` 是两种常用的组件,它们分别用于实现页面的滑动切换和标签页的展示。`ViewPager` 提供了流畅的左右滑动效果,而 `TabHost` 则是传统的标签栏控件,但不支持滑动切换。在某些...

    android 滑动的tabhost

    "android 滑动的tabhost"是指将传统的TabHost与手势滑动结合,实现更流畅、更具互动性的用户体验。在本教程中,我们将深入探讨如何实现这样一个功能,并涉及以下几个关键知识点: 1. **TabHost基本用法**: - ...

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

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

    Android ViewPager和Tabhost结合,可滑动的tabhost-IT计算机-毕业设计.zip

    在这个源码Demo中,开发者可能将TabHost与ViewPager结合,以利用TabHost的标签显示功能和ViewPager的滑动切换特性。具体实现方式可能是这样的: 1. 首先,创建一个TabHost实例,并添加所需的标签页。每个标签页可能...

    ViewPager和Tabhost结合,可滑动的tabhost

    在标题提到的“可滑动的tabhost”中,`ViewPager`被用来实现标签的滑动切换效果,而不是使用默认的点击切换。这种方式可以提供更流畅的用户体验,因为用户可以直接通过手势在各个页面之间切换,而不需要点击标签。 ...

    viewPager和tabhost组合滑动,源码

    `ViewPager`允许用户通过手势左右滑动来切换页面,非常适合用于展示大量内容的场景,如新闻、图片或卡片视图。 `TabHost`则是Android原生的标签栏组件,可以承载多个`TabSpec`,每个`TabSpec`对应一个`Intent`,...

    Android例子源码tabhost+activity+slidingMenu

    然后,他们会集成SlidingMenu,通常是将菜单布局嵌入到主Activity的根布局中,并监听滑动手势。为了使SlidingMenu与TabHost协同工作,可能需要在某些事件(如Tab切换)中调整菜单的状态。 总的来说,这个例子展示了...

    Android高级应用源码-ViewPager和Tabhost结合,可滑动的tabhost.zip

    4. 通过TabHost的`setup()`方法将ViewPager和TabHost关联起来,确保TabHost的切换事件能够驱动ViewPager的页面切换。 **114623rk20r802mk1ukrk9.png**: 这个文件可能是一个截图或示意图,展示了结合使用ViewPager和...

    可以横向拖动的tabHost

    这个“可以横向拖动的TabHost”项目提供了一种创新的交互方式,让用户可以通过水平滑动来切换不同的Tab,而非传统的点击按钮。下面我们将深入探讨TabHost的基本概念、可拖动的实现原理以及如何在实际开发中应用这一...

    ViewPager和Tabhost结合,可滑动的tabhost.zip

    - 通常的做法是将`TabHost`的每个Tab内容替换为一个`ViewPager`,这样用户不仅可以通过点击Tab切换,还可以通过滑动手势在各个Tab之间切换。 - `ViewPager`的每个页面可以是一个Fragment,每个Fragment代表`...

    tabhost跟viewPager结合实现滑动tabhost

    它通常用于展示一系列的Fragment,用户可以通过手势左右滑动来切换页面,也可以设置指示器来显示当前所处的页面。 接下来,我们讨论如何将这两者结合: **步骤1:创建TabHost** 在布局文件中,我们需要定义一个...

Global site tag (gtag.js) - Google Analytics