- 浏览: 5825872 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (890)
- WindowsPhone (0)
- android (88)
- android快速迭代 (17)
- android基础 (34)
- android进阶 (172)
- android高级 (0)
- android拾遗 (85)
- android动画&效果 (68)
- Material Design (13)
- LUA (5)
- j2me (32)
- jQuery (39)
- spring (26)
- hibernate (20)
- struts (26)
- tomcat (9)
- javascript+css+html (62)
- jsp+servlet+javabean (14)
- java (37)
- velocity+FCKeditor (13)
- linux+批处理 (9)
- mysql (19)
- MyEclipse (9)
- ajax (7)
- wap (8)
- j2ee+apache (24)
- 其他 (13)
- phonegap (35)
最新评论
-
Memories_NC:
本地lua脚本终于执行成功了,虽然不是通过redis
java中调用lua脚本语言1 -
ZHOU452840622:
大神://处理返回的接收状态 这个好像没有监听到 遇 ...
android 发送短信的两种方式 -
PXY:
拦截部分地址,怎么写的for(int i=0;i<lis ...
判断是否登录的拦截器SessionFilter -
maotou1988:
Android控件之带清空按钮(功能)的AutoComplet ...
自定义AutoCompleteTextView -
yangmaolinpl:
希望有表例子更好。。。,不过也看明白了。
浅谈onInterceptTouchEvent、onTouchEvent与onTouch
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的例子了。
发表评论
-
利用广播实现强制下线功能
2016-12-28 10:45 1473最近一口气买 ... -
Android百分比布局Percent支持库
2015-09-02 11:08 3149虽然有很多的布局可以在 Android 应用程序开发的世界供我 ... -
ViewDragHelper行为测试
2015-08-12 17:36 2745只是简单记录一下 以后可能会实现一些效果 import ... -
android5.x之Palette调色板
2015-07-17 10:30 3342Palette类可以分析一张图片,取出这张图片的特征色,然后为 ... -
使用ClipboardManager剪贴板实现复制粘贴功能
2015-04-10 14:39 3778经常要使用复制粘贴的功能,比如长安一个TextView弹出一个 ... -
LocationListener监听位置变化,当进入到某一距离内时发出提醒
2014-08-19 15:03 7682项目中需要这样的要求: 启动一个服务一直在背后监听当前位置变化 ... -
Android下集成FacebookSDk到项目并发表评论
2013-08-28 14:36 4877项目中需要发表自己的评论到Facebook,需要集成Faceb ... -
MediaRecorder录音,MediaPlayer播放
2013-05-23 09:53 7551直接看代码 import java.io.DataOutp ... -
Notification的基本用法
2013-05-22 11:52 5967android4.0以前: private static ... -
android音频、视频、拍照基础操作
2013-03-27 11:55 2831播放音乐和视频用的是类:MediaPlayer 刻录声音和视 ... -
VideoView简单视频播放
2013-02-17 17:17 9304只是上上手而已的例子。 package com.chen ... -
android 再按一次后退键退出应用程序
2012-06-15 21:51 4132private static Boolean isExit ... -
AlarmManager全局定时器/闹钟
2012-02-01 10:11 5863http://407827531.iteye.com/blog ... -
倒计时的CountDownTimer
2011-12-23 13:06 31247直接看这里吧,我只是搬运工。 定时执行在一段时候后停止的倒计 ... -
Android流量统计TrafficStats类的使用
2011-12-06 16:25 26467对于Android流量统计来说在2.2版中新加入了Traffi ... -
ScrollView当显示超出当前页面时自动移动到最底端
2011-09-01 09:42 17013卷轴视图(ScrollView)是指当拥有很多内容,一屏显示不 ... -
在SurfaceView上拖动一架飞机
2011-08-23 12:40 2943接上一篇在SurfaceView上拖动一张小图片 什么叫拖动飞 ... -
在SurfaceView上拖动一张小图片
2011-08-22 18:20 5247用手指随便拖。这里采用了线程去绘制,其实也可以在onTouch ... -
用getIdentifier()获取资源Id
2011-07-28 22:36 10774做项目过程中遇到一个问题,从数据库里读取图片名称,然后调用图片 ... -
利用VelocityTracker监控对触摸的速度跟踪
2011-07-28 22:12 10065VelocityTracker就是速度跟踪的意思。我们可以获得 ...
相关推荐
本示例中的"手势滑动切换activity"是通过结合使用`TabHost`和`ViewPager`组件来实现的,这两种组件在Android应用设计中都有着重要的作用。 `TabHost`是Android系统提供的一个容器,它允许开发者创建带有标签页的...
描述中的“简单的例子 能够运行流畅 是想手机一样的 通过手指左右滑动切换tabhost”进一步强调了这个功能的实际应用和效果。这意味着开发者已经成功地实现了TabHost与手势识别的结合,使得用户可以像操作智能手机主...
4. **关联TabHost和ViewPager**:为了实现滑动切换选项卡的效果,开发者需要监听TabHost的选中事件,并根据选中的标签改变ViewPager当前显示的页面。这通常是通过设置TabHost的OnTabChangeListener来实现的。 5. **...
4. **处理滑动手势**: 为了使用户可以通过左右滑动切换Activity,需要监听ViewPager的滑动事件。这可以通过在ViewPager中设置OnPageChangeListener实现。当页面滑动时,更新TabLayout中的选中标签。 5. **菜单项和...
本教程将详细讲解如何通过手势控制TabHost中的Activity切换,这对于初学者来说是一份宝贵的资源。 首先,我们要理解手势识别(Gesture Recognition)在Android中的应用。Android SDK提供了一个叫做...
通过查看和分析这些文件,开发者可以学习如何在实际项目中实现选项卡滑动切换效果,包括自定义滑动动画、响应手势事件以及优化用户体验等方面的知识。 总之,“Tab选项卡页面滑动切换”是一个功能强大且实用的UI...
总结,这个示例项目展示了如何在Android应用中使用FragmentActivity、TabLayout和ViewPager来实现一个功能完善的多标签页界面,同时通过手势支持平滑的滑动切换。这种方法不仅适用于API 19及以上的设备,而且符合...
在Android开发中,`...通过这样的方式,我们可以实现一个功能完善的、可滑动切换的TabHost,提供给用户更友好的交互体验。在实际开发中,还可以根据需求进一步定制,比如添加滑动监听事件、处理页面间的数据传递等。
在本案例中,我们将讨论如何利用`ViewPager` 实现类似`TabHost` 的滑动切换效果,但不包含`TabHost` 传统的彩色指示条。 首先,`ViewPager` 是Android Support Library的一部分,它提供了一个可以水平滑动的视图...
在安卓开发中,`ViewPager` 和 `TabHost` 是两种常用的组件,它们分别用于实现页面的滑动切换和标签页的展示。`ViewPager` 提供了流畅的左右滑动效果,而 `TabHost` 则是传统的标签栏控件,但不支持滑动切换。在某些...
"android 滑动的tabhost"是指将传统的TabHost与手势滑动结合,实现更流畅、更具互动性的用户体验。在本教程中,我们将深入探讨如何实现这样一个功能,并涉及以下几个关键知识点: 1. **TabHost基本用法**: - ...
然而,标准的TabHost功能有限,往往需要进行自定义以满足更复杂的需求,如动态添加选项、自动水平滑动以及手势切换选项卡。下面我们将深入探讨如何实现这样的自定义TabHost。 一、自定义TabHost的基本原理 自定义...
在这个源码Demo中,开发者可能将TabHost与ViewPager结合,以利用TabHost的标签显示功能和ViewPager的滑动切换特性。具体实现方式可能是这样的: 1. 首先,创建一个TabHost实例,并添加所需的标签页。每个标签页可能...
在标题提到的“可滑动的tabhost”中,`ViewPager`被用来实现标签的滑动切换效果,而不是使用默认的点击切换。这种方式可以提供更流畅的用户体验,因为用户可以直接通过手势在各个页面之间切换,而不需要点击标签。 ...
`ViewPager`允许用户通过手势左右滑动来切换页面,非常适合用于展示大量内容的场景,如新闻、图片或卡片视图。 `TabHost`则是Android原生的标签栏组件,可以承载多个`TabSpec`,每个`TabSpec`对应一个`Intent`,...
然后,他们会集成SlidingMenu,通常是将菜单布局嵌入到主Activity的根布局中,并监听滑动手势。为了使SlidingMenu与TabHost协同工作,可能需要在某些事件(如Tab切换)中调整菜单的状态。 总的来说,这个例子展示了...
4. 通过TabHost的`setup()`方法将ViewPager和TabHost关联起来,确保TabHost的切换事件能够驱动ViewPager的页面切换。 **114623rk20r802mk1ukrk9.png**: 这个文件可能是一个截图或示意图,展示了结合使用ViewPager和...
这个“可以横向拖动的TabHost”项目提供了一种创新的交互方式,让用户可以通过水平滑动来切换不同的Tab,而非传统的点击按钮。下面我们将深入探讨TabHost的基本概念、可拖动的实现原理以及如何在实际开发中应用这一...
- 通常的做法是将`TabHost`的每个Tab内容替换为一个`ViewPager`,这样用户不仅可以通过点击Tab切换,还可以通过滑动手势在各个Tab之间切换。 - `ViewPager`的每个页面可以是一个Fragment,每个Fragment代表`...
它通常用于展示一系列的Fragment,用户可以通过手势左右滑动来切换页面,也可以设置指示器来显示当前所处的页面。 接下来,我们讨论如何将这两者结合: **步骤1:创建TabHost** 在布局文件中,我们需要定义一个...