`
wghjay
  • 浏览: 91245 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android实现swipe的手势及页面拖动动画

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

首先创建自己的一个手势detector类:
Java代码

   1. class MyGestureDetector extends SimpleOnGestureListener { 
   2. @Override 
   3. public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
   4. } 

class MyGestureDetector extends SimpleOnGestureListener { @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { }



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

   1. private static final int SWIPE_MIN_DISTANCE = 120; 
   2. private static final int SWIPE_MAX_OFF_PATH = 250; 
   3. private static final int SWIPE_THRESHOLD_VELOCITY = 200; 

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动作:
Java代码

   1. if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
   2. viewFlipper.setInAnimation(slideLeftIn); 
   3. viewFlipper.setOutAnimation(slideLeftOut); 
   4. viewFlipper.showNext(); 
   5. } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
   6. viewFlipper.setInAnimation(slideRightIn); 
   7. viewFlipper.setOutAnimation(slideRightOut); 
   8. viewFlipper.showPrevious(); 
   9. } 

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动画, 可以达到一些不错的效果:
Java代码

   1. viewFlipper = (ViewFlipper)findViewById(R.id.flipper); 
   2.         slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_left_in); 
   3.         slideLeftOut = AnimationUtils.loadAnimation(this, R.anim.slide_left_out); 
   4.         slideRightIn = AnimationUtils.loadAnimation(this, R.anim.slide_right_in); 
   5.         slideRightOut = AnimationUtils.loadAnimation(this, R.anim.slide_right_out); 

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, 比如从左边进来的一个动画:
Xml代码

   1. <set xmlns:android="http://schemas.android.com/apk/res/android"> 
   2.     <translate android:fromXDelta="100%p" android:toXDelta="0" android:duration="800"/> 
   3. </set> 

<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:
Java代码

   1. @Override 
   2. public boolean onTouchEvent(MotionEvent event) { 
   3. if (gestureDetector.onTouchEvent(event)) 
   4. return true; 
   5. else 
   6. return false; 
   7. } 

分享到:
评论

相关推荐

    android 手势导致页面滑动

    本话题主要聚焦于“Android手势导致页面滑动”这一现象,我们将深入探讨Android手势识别机制,以及如何管理和控制手势以避免意外的页面滑动。 首先,Android系统提供了多种内置手势支持,包括滑动(Swipe)、点击...

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

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

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

    在Android开发中,创建一个可向左拖动以展示更多页面的通用控件...总之,实现这样一个功能需要掌握Android自定义视图的创建、手势检测和动画应用等技能。在实践中不断优化和扩展,可以创建出更符合用户习惯的交互控件。

    android 手势监听

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

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

    总之,实现“随手势滑动”的效果涉及Android触摸事件处理、动画机制、手势识别等多个方面。开发者可以根据实际需求选择合适的方法,结合Android SDK提供的工具类和第三方库,打造流畅的用户体验。

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

    对于其他多点触控手势,如旋转(Rotate)和拖动(Translate),可能需要额外实现Recognizer或直接处理MotionEvent。 总的来说,Android提供了强大的手势识别框架,通过ScaleGestureDetector可以轻松实现 pinch-to-...

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

    本主题将深入探讨“七大手势”的综合使用,包括如何在应用中添加、移除手势以及实现相应的动画效果。这七大手势通常指的是:单击(Tap)、双击(Double Tap)、长按(Long Press)、滑动(Swipe)、拖拽(Pan)、...

    android 拖拽控件资源下载

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

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

    1. **手势检测基础**:Android提供了GestureDetector类,用于识别基本的手势,如滑动(Swipe)、点击(Tap)和长按(Long Press)。在这个项目中,我们关注的是ScaleGestureDetector,它专门用于处理双指捏合(Pinch...

    Android 手势滑动源码.zip

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

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

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

    recyclerview交互动画代码

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

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

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

    Android高级应用源码-可拖拽View,仿墨迹天气城市管理.zip

    3. **手势检测(Gesture Detection)**:为了实现拖拽功能,开发者需要理解Android的手势检测机制,如使用` GestureDetector`或`SimpleOnGestureListener`来识别滑动(swipe)、长按(long press)等手势。...

    利用GestureDetector实现页面滑动Demo

    `OnGestureListener`提供了处理滑动(swipe)、轻触(tap)等基本手势的方法,而`OnDoubleTapListener`则用于处理双击(double tap)等复杂手势。在我们的`GestureSlidingDemo`中,主要关注`OnGestureListener`。 1...

    android 页面滑动

    `ViewPager`是Google提供的用于实现页面左右滑动的组件,常用于实现Tab布局或者滑动切换的页面。而`ScrollView`、`HorizontalScrollView`和`NestedScrollView`则主要用于处理单个视图的上下或左右滚动。 1. **...

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

    这个项目“Android-滑动和拖动支持的RecyclerView并带有撤销动作”着重于实现用户友好的交互功能,包括滑动删除、拖动排序以及撤销操作,这些都是提高用户体验的关键元素。 滑动删除(Swipe-to-Dismiss)功能允许...

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

    通过分析和学习这个源码资源,开发者不仅可以了解到如何在Android中实现拖动按钮,还能提升对触摸事件处理、手势检测以及自定义View的理解,从而提高自己的Android开发技能。同时,对于喜欢探索和创新的开发者来说,...

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

    使用Matrix实现的相册系统通常会集成手势识别,比如 pinch-to-zoom(捏合缩放) 和swipe-to-dismiss(滑动删除)。GestureDetector和ScaleGestureDetector是Android提供用于识别这些手势的类。 6. **图片裁剪与...

Global site tag (gtag.js) - Google Analytics