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. }
分享到:
相关推荐
SwipeActionAdapter, 用于Android的Swipe手势库 SwipeActionAdapter - 类似于Swipe手势库的邮箱 SwipeActionAdapter是一个库,它提供一个简单的API来创建类似于在ListView中浏览的邮箱。 这样做的目的是让它足够简单...
本篇文章主要介绍了iOS 用Swipe手势和动画实现循环播放图片示例,非常具有实用价值,需要的朋友可以参考下。
android-swipe-views-tabs.7z
ArcEngine+C#实现ArcGIS的Swipe卷帘功能
Swiper能实现触屏焦点图、触屏Tab切换、触屏多图切换等常用效果。 Swiper开源、免费、稳定、使用简单、功能强大,是架构移动终端网站的重要选择! 基于swipe4写了一个移动端的全屏滚动效果 但是图片始终不能自适应...
由于AIR原生的手势事件只有一个Swipe,还没有拖动效果。所以此类诞生。 使用方法: 1.首先,你需要一个这样格式的图片URL列表,需要是XML文件。 2.加载列表XML文件,并new一个SwipeBoard类,传入xml和...
而让我眼前一亮的是微格,它的操作方式可以看成是navigation+swipe,上手感觉很顺畅,手指的操作也很自然,这让我想起了前段时间诺基亚发布的N9,N9强调的一种用户体验就是swipe,一种最自然的手势。 自己也在...
Swipe-Deck - 仿 Tinder 的可以左右滑动消除卡片效果的自定义控件
accordion-swipe-layout:Android手风琴滑动布局
应用uni-swipe-action组件实现列表项左划操作。 真正做到开箱即用。
React本机滑动手势 React Native组件用于处理上下左右方向的滑动手势。 安装 npm i -S react-native-swipe-gestures 用法 'use strict' ; import React , { Component } from 'react' ; import { View , Text } ...
Swipe-Deck, Android的Tinder风格Swipeable面板视图 swipe Android的Tinder风格Swipeable面板视图注释我已经经将这里项目从地面编写为 SwipeDeck2,并且在这里可以用: https://github.com/aaronbond/SwipeDeck2我最
SwipeCardView是基于Diolor的Swipecards控件改进实现,SwipeCardView是一个优雅的刷脸控件,滑动刷脸伴随渐变层叠动画,带来前所未有的滑动刷脸体验。 thanks Diolor Swipecards Screenshot Relative Project ...
android-swipe-detector 在Android中检测滑动事件
After showcasing Focus for Reddit, the app I am working on, people asked me how did I do the tinder like cards swipe (posts media are shown as a stack of 3 swipable cards) and if I could make ...
Android Swipe Layout可以轻松集成到ListView,GridView,ViewGroup等任何位置。它可以接收onOpen,onClose,onUpdate回调。 也可以通知隐藏的孩子他们显示了多少。 Android Swipe Layout允许您将滑动与UI组件集成在...
超实用!! Android RecyclerView Undo Swipe支持.zip,使用撤消操作滑动和拖动对RecyclerView的支持。
Swipe JS – 移动WEB页面内容触摸滑动类库
这是本文中关于在没有任何外部库的情况下使用recyclerview创建swipe菜单的源代码。