`

tabhost通过手势滑动切换activity

阅读更多
package com.mars.mp3player;

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.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;

public class ActivityMain extends TabActivity {
	private TabSpec tabSpec;
	private TabHost tabHost;
	private Intent intent;
	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;

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

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.activity_main);
		UtilVar.activities.add(ActivityMain.this);
		this.initTableHost();

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

	}

	/**
	 * tablehost的初始化,代码完成
	 */
	private void initTableHost() {
		tabHost = super.getTabHost();
		// 歌曲列表
		intent = new Intent(ActivityMain.this, ActivityList.class);
		tabSpec = tabHost
				.newTabSpec("歌曲列表")
				.setIndicator("歌曲列表",
						getResources().getDrawable(R.drawable.ic_launcher))
				.setContent(intent);
		tabHost.addTab(tabSpec);
		// 正在播放
		intent = new Intent(ActivityMain.this, ActivityPlaying.class);
		tabSpec = tabHost
				.newTabSpec("正在播放")
				.setIndicator("正在播放",
						getResources().getDrawable(R.drawable.ic_launcher))
				.setContent(intent);
		tabHost.addTab(tabSpec);
		// 专辑列表
		intent = new Intent(ActivityMain.this, ActivityLyric.class);
		tabSpec = tabHost
				.newTabSpec("歌词显示")
				.setIndicator("歌词显示",
						getResources().getDrawable(R.drawable.ic_launcher))
				.setContent(intent);
		tabHost.addTab(tabSpec);
		// 设置当前tab
		tabHost.setCurrentTab(1);
	}

	// 左右滑动刚好页面也有滑动效果
	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) {
			}
			return false;
		}
	}

	@Override
	public boolean dispatchTouchEvent(MotionEvent event) {
		if (gestureDetector.onTouchEvent(event)) {
			event.setAction(MotionEvent.ACTION_CANCEL);
		}
		return super.dispatchTouchEvent(event);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}

}
// 主要代码就这样吧,以后就不必到处找手势跳转activity的例子了。
分享到:
评论

相关推荐

    手势滑动切换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