`

[原创] 如何在android中实现swipe的手势功能及页面拖动动画

阅读更多
iPhone界面解锁是用手指划动来实现的, 那么这个手势gesture在android里如何实现呢?

Android SDK提供了一个listener类来侦测各种不同的手势:
SimpleOnGestureListener.  你只需要实现自己所关心的手势就可以了.
Swipe在android里面是叫Fling ^_^

首先创建自己的一个手势detector类:
class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
}


一个划动的手势有几个特征, 比如是在x或者y轴上近乎直线的划动, 中途路径的偏差不能太大, 而且划动需要一定的速度, 所以我们定义几个定量:
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;


然后在onFling方法中, 判断是不是一个合理的swipe动作:
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
viewFlipper.setInAnimation(slideLeftIn);
viewFlipper.setOutAnimation(slideLeftOut);
viewFlipper.showNext();
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
viewFlipper.setInAnimation(slideRightIn);
viewFlipper.setOutAnimation(slideRightOut);
viewFlipper.showPrevious();
}


这里的viewFlipper是含有多个view的一个container, 可以很方便的调用prev/next view, 加上animation动画, 可以达到一些不错的效果:
viewFlipper = (ViewFlipper)findViewById(R.id.flipper);
        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);

自定义的animation可以查看具体的XML, 比如从左边进来的一个动画:
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="100%p" android:toXDelta="0" android:duration="800"/>
</set>


当然最后不要忘记在你的Activity中override onTouch方法来获取手势action:
@Override
public boolean onTouchEvent(MotionEvent event) {
if (gestureDetector.onTouchEvent(event))
return true;
else
return false;
}


这是view animation的一个截图:
 

源代码在附件中 ^_^
  • 大小: 6.7 KB
分享到:
评论
11 楼 lordhong 2009-04-23  
ScrollView自身对onTouch这些event有捕捉的.
你看看能不能override它的一些onTouch功能
10 楼 poppy_zy 2009-04-23  
lordhong大哥 你好
我想问一下 这个程序如何结合ScrollView使用
我在程序中如果加上ScrollView 手势的功能就没有了
请指教 谢谢
9 楼 lordhong 2009-04-22  
symbian的开发门槛比较高, 不过貌似开源了, 不知道对开发者的支持会不会好转.
我现在没怎么用C/C++, java够头痛的了.  iphone上是用objective-c.
国内因为做外包的太多, 所以java是白菜价了.  但做得好啊的, 也是大牛.
HTML做的好其实很不容易...
8 楼 flygo 2009-04-22  
lordhong 写道
flygo 写道
终于可以发帖了,真是等了好久了,每次注册一个帐号都要等一天才能发帖,但后来又忘了帐号。真是晕。我每天几乎会来看一下,今天我也回个帖。我可是冲着lordhong来的哦。看了你的很多帖子,非常的不错,也感谢你给我们提供好的资料。但移动的这个版块现在有点冷清的,我相信以后会火的,我也会,我因为最近也想搞移动方面的开发,我本来是做j2ee的,但是我所在公司是做移动应用的,感觉自己是在给他们做陪衬的,而且他们是用c++做的开发,也瞧不起java,晕死,心里不爽啊,的确在操作比效底层东西上面java还是不行,速度也的确有点慢。最近有空在看c++,想着这个还是比效有用,计算机上和手机上都可做开发,而且经久不衰的,java这两年不行了,真是成白菜价了,所以也想往 C/c++ 这个方向发展,但自己还一直在犹豫,不知道具体的方向,手机的平台也多。


我也终于可以发帖了... 这几天连续做了好几次脑残测试... Orz...

就冲你是冲我来的... 我就回答下... 一般人... 我不告诉的... 

你公司具体是做什么的? embedded linux吗?  一般这些只用到C, C++反而较少, 太底层了.
android基本上都是通过JNI(Java Native Interface)来call这些C的库.  对于我们新手来说, 起步是挺困难的.
我们可以先从Android的代码开始看, 由浅入深, 慢慢深入到C方面.  这需要一个过程, 要有耐心和恒心.

不过如果你可以精通android的源码的话, 已经是大牛一只了.  我最近开始看了下android的源码, 那个打击啊... 人与人的差距... 真大啊~~~~~~ 


做windows mobile平台和symbian的平台上面的应用,好像他们提供的sdk也只能用c++来写吧。我也在看看android方面 的,但是国内好像一款像样的手机还没出来,前景不知道怎么样啊,我倒是有兴趣做symbian上的应用开发,但是学习周期比较长,犹豫中。。。
问一下lordhong哥,不知道symbian的以后还会这样火吗,毕竟在国内nokia手机还是最多的。但听说国外用nokia的人并不是很多。。。。呵呵,还有问一下你平时用的c/c++做开发多吗?
android倒是在开发语言上有点底子,毕竟也做了几年的j2ee的,但j2me没做过,可能有些思想要转变一下。但我现在是想搞搞c/c++了,因为就算不用在的手机上在别处也可用。
最后想问怎么国内的人会看不起java,就觉得用c/c++是很高级的事情的呢?真郁闷,国外也这样吗?
7 楼 flygo 2009-04-22  
提起jni来调用c的so库真是寒!!!因为最近用到,所以以后我能不用我死都不会去jni调c 的,稳定性大打折扣,动不动jvm就挂了,java这里没了地位了,我们想控制也控制不了,只有去找c 那边的,受制于人啊。。
6 楼 lordhong 2009-04-22  
flygo 写道
终于可以发帖了,真是等了好久了,每次注册一个帐号都要等一天才能发帖,但后来又忘了帐号。真是晕。我每天几乎会来看一下,今天我也回个帖。我可是冲着lordhong来的哦。看了你的很多帖子,非常的不错,也感谢你给我们提供好的资料。但移动的这个版块现在有点冷清的,我相信以后会火的,我也会,我因为最近也想搞移动方面的开发,我本来是做j2ee的,但是我所在公司是做移动应用的,感觉自己是在给他们做陪衬的,而且他们是用c++做的开发,也瞧不起java,晕死,心里不爽啊,的确在操作比效底层东西上面java还是不行,速度也的确有点慢。最近有空在看c++,想着这个还是比效有用,计算机上和手机上都可做开发,而且经久不衰的,java这两年不行了,真是成白菜价了,所以也想往 C/c++ 这个方向发展,但自己还一直在犹豫,不知道具体的方向,手机的平台也多。


我也终于可以发帖了... 这几天连续做了好几次脑残测试... Orz...

就冲你是冲我来的... 我就回答下... 一般人... 我不告诉的... 

你公司具体是做什么的? embedded linux吗?  一般这些只用到C, C++反而较少, 太底层了.
android基本上都是通过JNI(Java Native Interface)来call这些C的库.  对于我们新手来说, 起步是挺困难的.
我们可以先从Android的代码开始看, 由浅入深, 慢慢深入到C方面.  这需要一个过程, 要有耐心和恒心.

不过如果你可以精通android的源码的话, 已经是大牛一只了.  我最近开始看了下android的源码, 那个打击啊... 人与人的差距... 真大啊~~~~~~ 
5 楼 flygo 2009-04-22  
终于可以发帖了,真是等了好久了,每次注册一个帐号都要等一天才能发帖,但后来又忘了帐号。真是晕。我每天几乎会来看一下,今天我也回个帖。我可是冲着lordhong来的哦。看了你的很多帖子,非常的不错,也感谢你给我们提供好的资料。但移动的这个版块现在有点冷清的,我相信以后会火的,我也会,我因为最近也想搞移动方面的开发,我本来是做j2ee的,但是我所在公司是做移动应用的,感觉自己是在给他们做陪衬的,而且他们是用c++做的开发,也瞧不起java,晕死,心里不爽啊,的确在操作比效底层东西上面java还是不行,速度也的确有点慢。最近有空在看c++,想着这个还是比效有用,计算机上和手机上都可做开发,而且经久不衰的,java这两年不行了,真是成白菜价了,所以也想往 C/c++ 这个方向发展,但自己还一直在犹豫,不知道具体的方向,手机的平台也多。
4 楼 lordhong 2009-04-21  
jiachengxi38 写道
好贴,,受教了。。。随便问一下,,大牛们,,,哪里来的这么多时间来研究新技术呀?工作之余?社会生活安排的时间比例又占多少呢?

30多岁的人了, 该玩的都玩了, 以前开过酒吧, 哈哈.  现在静下心来低调学习...
俗话说得好: 时间就像乳沟, 挤挤还是有的...
3 楼 jiachengxi38 2009-04-21  
好贴,,受教了。。。随便问一下,,大牛们,,,哪里来的这么多时间来研究新技术呀?工作之余?社会生活安排的时间比例又占多少呢?
2 楼 lordhong 2009-04-18  
hetylei 写道
我在想用模似器怎么测试多点触摸..

鼠标 + 键盘 可以模拟吧...
1 楼 hetylei 2009-04-17  
我在想用模似器怎么测试多点触摸..

相关推荐

    android 手势导致页面滑动

    在Android开发中,手势(Gesture)是用户与设备交互的重要方式之一,特别是在移动应用中,手势操作能够提供直观且高效的操作体验。本话题主要聚焦于“Android手势导致页面滑动”这一现象,我们将深入探讨Android手势...

    android手势拖动实现侧边栏效果

    总结,实现“android手势拖动实现侧边栏效果”需要理解Android手势识别机制,合理设计布局,以及熟练运用动画系统。通过以上步骤,我们可以创建一个类似TestSideShowApp的应用,为用户提供直观且流畅的侧边栏滑动...

    Android-一分钟实现向左拖拽跳转至更多页面的通用控件

    在Android开发中,创建一个可向左拖动以展示更多页面的通用控件是一项常见的需求,这能够为用户带来更加直观且有趣的交互体验。本文将详细介绍如何在一分钟内实现这样的功能,主要涉及Android自定义视图、手势检测...

    安卓Android源码——通过手势实现的缩放处理 .zip

    本文将深入探讨如何在Android源码中通过手势实现缩放处理,为用户提供更加直观和丰富的操作体验。 首先,理解Android的手势识别机制至关重要。Android系统提供了GestureDetector类,它是一个用于检测常见触摸屏手势...

    在android中实现类似uc和墨迹天气的左右拖动效果

    在Android开发中,实现类似UC浏览器和墨迹天气应用中的左右滑动切换页面的效果,通常涉及到自定义View或者使用已有的第三方库来实现。这种效果通常被称为“Fling”或“Swipe”效果,它允许用户通过手势在多个视图...

    android 手势监听

    在这个场景中,我们将深入探讨如何在Android中实现手势监听,并结合“View的位置参数”这一概念,来创建动态效果和动画。 首先,理解“View的位置参数”至关重要。在Android中,每个View都有一个位置,由它的left、...

    android随着手势的滑动而滑动的效果

    在Android开发中,实现“随手势滑动”的效果是一项常见的任务,这主要涉及到触摸事件的处理和视图的动画效果。下面将详细讲解如何在Android应用中实现这种滑动效果。 1. 触摸事件处理: 在Android中,触摸事件主要...

    安卓Android源码——通过手势实现的缩放处理.zip

    本资源“安卓Android源码——通过手势实现的缩放处理.zip”着重讲解了如何利用手势处理来实现界面元素的缩放功能,这对于创建具有丰富用户体验的应用至关重要。主要涉及的知识点包括: 1. **手势检测基础**:...

    七大手势的综合使用,添加手势前,移除所有手势,动画效果

    在iOS和Android等移动平台开发中,手势(Gesture Recognizer)是用户与应用程序交互的重要方式。本主题将深入探讨“七大手势”的综合使用,包括如何在应用中添加、移除手势以及实现相应的动画效果。这七大手势通常指...

    android 拖拽控件资源下载

    在Android开发中,实现手势拖拽控件移动是一项常见的需求,尤其在构建交互性强的用户界面时。这个资源包“DragDrop”很可能包含了实现这一功能的相关代码示例、库文件或者教程,帮助开发者快速理解和应用拖放操作。...

    Android 手势滑动源码.zip

    在手势滑动中,Scroller可以用来实现页面的平滑滚动效果。 4. **ViewDragHelper**: 在处理更复杂的手势,比如拖放(Drag & Drop)或者抽屉布局(DrawerLayout)时,ViewDragHelper是一个非常有用的工具类。它可以...

    Android-滑动和拖动支持的RecyclerView并带有撤销动作

    滑动删除(Swipe-to-Dismiss)功能允许用户通过在列表项上做简单的滑动手势来删除项目。这种功能在许多应用中都很常见,如邮件应用中的删除邮件。在RecyclerView中实现滑动删除,通常需要自定义一个ItemTouchHelper....

    recyclerview交互动画代码

    2. 滑动手势(Swipe to Dismiss):同样,ItemTouchHelper也可以帮助我们实现滑动手势,比如在列表中向左滑动以删除item。在Callback中,你需要重写`onSwiped()`方法来处理滑动后的逻辑,同时定义`onChildDraw()`来...

    android 类似于桌面切换的滑动效果

    在Android中,可以使用ViewPager或者HorizontalScrollView等组件来实现页面的左右滑动。ViewPager可以自动管理多个页面,并提供平滑的过渡动画,非常适合实现类似桌面的效果。 ```xml &lt;androidx.viewpager.widget....

    利用GestureDetector实现页面滑动Demo

    在Android开发中,手势识别是用户交互的重要组成部分。`GestureDetector`是Android SDK提供的一种用于检测常见触摸手势的工具类,比如单击、长按、滑动等。本教程将详细讲解如何利用`GestureDetector`来实现一个页面...

    Android 拖动按钮效果源码.zip源码资源下载

    在Android开发中,拖动按钮(Draggable Button)是一种创新的交互设计,它允许用户通过手势来控制按钮的状态,提供了一种独特的用户体验。本资源提供的是一个实现Android拖动按钮效果的源码示例,可以帮助开发者更好...

    Android高级应用源码-android相册系统(用Matrix实现).rar

    通过这些方法,开发者可以对Bitmap进行各种复杂的操作,比如在相册应用中实现图片的缩放、旋转和拖动。 2. **图片加载与缓存**: 高效的相册系统通常会包含一个图片加载库,如Glide或Picasso,它们负责从磁盘、...

    android 页面滑动

    在Android开发中,页面滑动(Swipe)是用户体验中的一个重要组成部分,它涉及到用户与界面的交互,尤其是在移动设备上,用户通常通过滑动来浏览内容、切换页面或触发某些功能。本篇将深入探讨Android页面滑动的相关...

    RecyclerView实现侧滑删除和拖拽功能

    在实现侧滑删除和拖拽功能时,我们需要在Adapter中扩展这些基础功能。 1. **侧滑删除(Swipe to dismiss)** - 创建自定义的RecyclerView.Adapter,并重写`onCreateViewHolder`、`onBindViewHolder`方法,确保每个...

Global site tag (gtag.js) - Google Analytics