手机进入智能机时代,触摸屏也已成为主流之势,原来的手机按键也被屏幕点触取代,滑动屏幕操作则相对屏幕点击更能获得用户的青睐,习惯了各种浏览器的鼠标手势、pad等平板的切滑、类似iReader的软件丰富的手势后,是不是也想自己的软件能够用食指炫起来呢,下面就让我们来看看android的手势操作吧
先介绍下左右滑动切换Activity,对于复杂的手势原理一样,具体后述。
主要原理为监控触屏事件和手势事件,在触屏事件处理函数中调用手势事件处理函数,表示用户触屏后是否有手势操作,有则进行手势事件处理,大致分为四步
1、需要继承OnGestureListener和OnDoubleTapListener,如下:
- public class ViewSnsActivity extends Activity implements OnTouchListener, OnGestureListener
这两个类分别是触屏监听器和手势监控器,具体可查看OnTouchListener和OnGestureListener
2、在添加mGestureDetector的定义,并在ViewSnsActivity的onCreate函数中加入其页面布局的setOnTouchListener事件
- GestureDetector mGestureDetector;
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.view_sns_activity);
- mGestureDetector = new GestureDetector((OnGestureListener) this);
- LinearLayout viewSnsLayout = (LinearLayout)findViewById(R.id.viewSnsLayout);
- viewSnsLayout.setOnTouchListener(this);
- viewSnsLayout.setLongClickable(true);
- }
mGestureDetector为手势监听对象,下面的OnFling就是为其实现,用来处理手势的
viewSnsLayout.setOnTouchListener(this);表示viewSnsLayout这个layout的触屏事件由下面的OnTouch处理
3、重载onFling函数
- private int verticalMinDistance = 20;
- private int minVelocity = 0;
- public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
- if (e1.getX() - e2.getX() > verticalMinDistance && Math.abs(velocityX) > minVelocity) {
- // 切换Activity
- // Intent intent = new Intent(ViewSnsActivity.this, UpdateStatusActivity.class);
- // startActivity(intent);
- Toast.makeText(this, "向左手势", Toast.LENGTH_SHORT).show();
- } else if (e2.getX() - e1.getX() > verticalMinDistance && Math.abs(velocityX) > minVelocity) {
- // 切换Activity
- // Intent intent = new Intent(ViewSnsActivity.this, UpdateStatusActivity.class);
- // startActivity(intent);
- Toast.makeText(this, "向右手势", Toast.LENGTH_SHORT).show();
- }
- return false;
- }
OnFling的四个参数意思分别为
- e1 The first down motion event that started the fling.手势起点的移动事件
- e2 The move motion event that triggered the current onFling.当前手势点的移动事件
- velocityX The velocity of this fling measured in pixels per second along the x axis.每秒x轴方向移动的像素
- velocityY The velocity of this fling measured in pixels per second along the y axis.每秒y轴方向移动的像素
说的更简单点就是,鼠标手势相当于一个向量(当然有可能手势是曲线),e1为向量的起点,e2为向量的终点,velocityX为向量水平方向的速度,velocityY为向量垂直方向的速度
- if (e1.getX() - e2.getX() > verticalMinDistance && Math.abs(velocityX) > minVelocity)
则上面的语句能知道啥意思了吧,就是说向量的水平长度必须大于verticalMinDistance,并且水平方向速度大于minVelocity
从而我们可以如此判断手势是否满足一定的条件从而进行相应响应,也可以根据这个写出更复杂的手势判断。
4、重载onTouch函数
在2中我们定义了viewSnsLayout的touch事件处理,下面我们来实现,直接调用手势的处理函数
- public boolean onTouch(View v, MotionEvent event) {
- return mGestureDetector.onTouchEvent(event);
- }
查看GestureDetector类的onTouchEvent的源码就能知道,进入该函数后会进入case MotionEvent.ACTION_UP这个路径,从而调用onFling函数
如果需要设置activity切换效果,在startActivity(intent);之后添加
overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);即可,可修改相应参数,可参考http://www.iteye.com/topic/1116472
其他:
关于activity添加ScrollView后或是外部为RelativeLayout时onFling不起作用,无法滑动问题见http://trinea.iteye.com/blog/1213815
相关推荐
### Android滑动切换及屏幕手势实现详解 随着智能手机时代的到来,触摸屏技术逐渐成为主流,传统的物理按键被触摸屏操作所取代。其中,滑动手势因其直观性和便捷性而受到用户的广泛欢迎。本文将深入探讨如何在...
`ViewPager`可以轻松地实现左右滑动切换页面的效果,并且可以配合`Fragment`来管理每个页面的内容。`Fragment`是一种可以在Activity中动态添加、移除或替换的UI组件,非常适合用于构建复杂的应用界面。 在`...
本文将深入探讨如何实现"Android手势滑动切换Activity"这一功能,帮助开发者提升应用的用户体验。 首先,理解Activity是Android应用程序的基本组件,用于展示用户界面并处理用户交互。在Android系统中,我们通常...
【标题】:“一个Android桌面滑动切换屏幕的控件(二)” 在Android开发中,为用户提供流畅且直观的界面交互至关重要,而滑动切换屏幕是实现这一目标的关键技术之一。这个博客“一个Android桌面滑动切换屏幕的控件(二...
它可以简单实现子页面的切换,,, 它只需使用addView方法添加几个View,每个View对应的是一个页面,即可完成对于多页面的管理,,, 在android上实现手势的识别也比较简单,可以实现OnTouchListener和...
在移动应用开发中,滑动手势切换屏幕是一种常见的交互方式,尤其在Android系统中非常流行。用户通过简单的手指滑动操作就能实现界面间的平滑过渡,提升了用户体验。本篇文章将详细探讨滑动手势切换屏幕的技术实现及...
2. **ViewPager**:ViewPager是Android中的一个适配器视图,用于展示多个全屏页面,并允许用户左右滑动切换页面。ViewPager内部使用了PageTransformer接口,可以通过自定义Transformer实现滑动时的动画效果,增强...
在Android开发中,创建一个能够实现纵向滑动,即上下滑动效果的页面是一项常见的任务。这样的效果常常用于实现如滚动列表、轮播图或阅读器等应用功能。本教程将详细讲解如何在Android中实现这样的功能,并结合提供的...
首先,"Android手指滑动切换页面"是一个常见的交互设计,它允许用户通过简单的手势在应用的不同页面之间导航。实现这一功能通常涉及到Android的触摸事件处理。在Activity或Fragment中,你需要监听MotionEvent事件,...
对于左右滑动切换页面,我们可以利用`SwipeRefreshLayout`(Android)或`UIPanGestureRecognizer`(iOS)来增强用户体验。`SwipeRefreshLayout`允许用户通过上滑手势刷新内容,而`UIPanGestureRecognizer`则可以捕捉...
标题提到的“android通过手势切换activity”是指通过用户的手势操作,比如滑动,来实现不同Activity之间的切换,从而实现更流畅、直观的界面导航。这一功能在许多应用中都有所应用,尤其是那些需要展示多个页面或者...
总之,Android中的左右滑动切换图片功能涉及到了触摸事件处理、页面容器(如`ViewPager`)的使用、适配器的设计以及手势识别等多个知识点。理解和掌握这些内容对于提升Android开发技能非常有帮助。在实际开发中,...
ViewPager是Android提供的一个用于展示多个页面并支持滑动切换的控件。它可以自动处理页面的滑动动画和切换逻辑。如果你需要更自定义的行为,比如支持上滑和下滑,那么可能需要自定义ScrollView,重写onTouchEvent...
在Android开发中,实现Activity之间的滑动切换效果可以极大地提升用户体验,这种效果通常与新闻阅读应用、杂志式布局或者页面浏览类应用相关。本话题主要关注如何通过手势识别来实现类似Zaker应用中的Activity滑动...
在这个项目中,可能已经实现了自定义的日历视图,以展示当前日期和农历,并支持手势滑动切换日期。 2. 农历支持: - 农历转换通常需要借助第三方库,如`com.github.fengdai:android-lunar-calendar:1.0.2`。这个库...
在Android开发中,实现“左右滑动切换屏幕,上下滑动滚屏”的功能是一项常见的需求,这涉及到Android的触摸事件处理、布局管理以及视图滚动技术。以下将详细阐述这一主题。 1. 触摸事件处理 Android系统通过...
在Android开发中,手势识别是增强用户交互体验的重要一环,尤其在移动设备上,滑动翻页手势已经成为用户操作的常见方式。本教程将详细讲解如何在Android应用中实现上下和左右滑动翻页的效果。 一、Android手势基础 ...
标题“android 视频详情 评论 相关 滑动切换”暗示了这是一个涉及到视频详情展示、评论功能以及通过滑动操作在这些内容之间切换的应用示例。描述中提到这是一个基于Eclipse的完整Demo,意味着我们可以从源代码中学习...
在Android开发中,ViewPager是一个非常常用的组件,常用于展示多个页面并进行平滑的左右滑动切换。然而,原生的ViewPager并不支持自动切换和某些特定的手势操作,因此开发者经常需要对其进行封装来满足这些需求。这...
在Android开发中,创建一个左右滑动切换样式的界面是一种常见的设计手法,它通常用于实现如应用内页面导航、选项卡切换等效果。这个"Android左右滑动切换样式.rar"的源代码包提供了实现这种交互体验的方法。让我们...