Android手势识别ViewFlipper触摸动画(An-Beer工作室)
Android Gesture之触摸屏手势识别操作
Android Gesture之触摸屏手势识别操作!利用触摸屏手势实现一个简单切换图片的功能!本文补充:网上很多关于手势文章都说Android 对手势的支持是从SDK 1.6 (也就是API 4)才开始的,但是我用SDK1.5模拟器也能识别!。
(本想测试下更低的SDK的支持效果,但是我没有SDK低于1.5版本的....我手机SDK 2.2的- -、),所以查了Api 发现:android.view.GestureDetector.OnGestureListener; since api-1 ,android.view.GestureDetector; since api-1 ,从API来看从api-1开始就已经支持手势和手势监听器了,那么很多说api-4才支持这句话也没错!因为:android.gesture这个类是从api-4才开始支持的,这个类输入法手势识别中会用到!so~结论:触摸屏手势识别是从API-1 就开始支持了。
而输入法手势识别是API-4才开始支持的!这里要搞清楚!对于Android 的手势不光在软件中会经常用到,比如浏览器中的翻页,滚动页面等等;当然其实在我们开发Android游戏的时候加上了Android手势操作更会让游戏增加一个亮点,比如一般的CAG ,PUZ等类型的游戏选择关卡啦、简单背景的移动啦,都可以使用手势来操作即可,类似前段时间很火的《让人愤怒的小鸟!》咳咳、不好意思说错了,是《愤怒的小鸟》,因为总是听群里啊,朋友啊说小鸟出新版本啦,小鸟出PC硬盘版啦!唉~你说可让人愤怒,其实说实话,小鸟这个游戏确实不错,我所看到的唯一的亮点是这款游戏的创意!说实话,现在的游戏没有做不出来的只有想不出来的好创意、咳咳。
回到话题来,那么下面我们来稍微了解下什么是Android 手势!所谓手势操作,类似跳舞机、EZdancer~这些利用不同动作和音符让人手舞足蹈一样,那么Android这里的手势只是让我们在游戏和软件中的操作有了更多的花样和玩法,根据玩家接触屏幕时间的长短,在屏幕上滑动的距离,按下抬起的时间等进行了包装,其实就是Android 对触屏处理做了包装和处理。
Android中实现滑动翻页—使用ViewFlipper
ViewFilpper类继承于ViewAnimator类。而ViewAnimator类继承于FrameLayout。
查看ViewAnimator类的源码可以看出此类的作用主要是为其中的View切换提供动画效果。该类有如下几个和动画相关的方法。
setInAnimation:设置View进入屏幕时候使用的动画。该方法有两个重载方法,即可以直接传入Animation对象,也可以传入定义的Animation文件的resourceID。
setOutAnimation:设置View退出屏幕时候使用的动画。使用方法和setInAnimation方法一样。
showNext:调用该方法可以显示FrameLayout里面的下一个View。
showPrevious:调用该方法可以来显示FrameLayout里面的上一个View。
查看ViewFlipper的源码可以看到,ViewFlipper主要用来实现View的自动切换。该类提供了如下几个主要的方法。
setFilpInterval:设置View切换的时间间隔。参数为毫秒。
startFlipping:开始进行View的切换,时间间隔是上述方法设置的间隔数。切换会循环进行。
stopFlipping:停止View切换。
setAutoStart:设置是否自动开始。如果设置为“true”,当ViewFlipper显示的时候View的切换会自动开始。
一般情况下,我们都会使用ViewFilpper类实现View的切换,而不使用它的父类ViewAnimator类。
viewflipper手势拖动效果(An-Beer工作室)
ViewFlipper的使用2010-08-11 15:31屏幕切换指的是在同一个Activity内屏幕见的切换,最长见的情况就是在一个FrameLayout内有多个页面,比如一个系统设置页面;一个个性化设置页面。
通过查看OPhone API文档可以发现,有个android.widget.ViewAnimator类继承至FrameLayout,ViewAnimator类的作用是为FrameLayout里面的View切换提供动画效果。
该类有如下几个和动画相关的函数:l setInAnimation:设置View进入屏幕时候使用的动画,该函数有两个版本,一个接受单个参数,类型为android.view.animation.Animation;一个接受两个参数,类型为Context和int,分别为Context对象和定义Animation的resourceID。
∙setOutAnimation: 设置View退出屏幕时候使用的动画,参数setInAnimation函数一样。
∙showNext:调用该函数来显示FrameLayout里面的下一个View。
∙showPrevious:调用该函数来显示FrameLayout里面的上一个View。
一般不直接使用ViewAnimator而是使用它的两个子类ViewFlipper和ViewSwitcher。
ViewFlipper可以用来指定FrameLayout内多个View之间的切换效果,可以一次指定也可以每次切换的时候都指定单独的效果。
该类额外提供了如下几个函数:∙isFlipping:用来判断View切换是否正在进行∙setFilpInterval:设置View之间切换的时间间隔∙startFlipping:使用上面设置的时间间隔来开始切换所有的View,切换会循环进行∙stopFlipping: 停止View切换ViewSwitcher 顾名思义Switcher特指在两个View之间切换。
【新提醒】flashplayer触摸、手势知识整理
【新提醒】flashplayer触摸、手势知识整理2010年的时候adobe推出了触摸、手势相关的api,大概整理了下相关的东西分享给大家目录目录 (1)触摸输入的基础知识 (2)触摸输入 API 结构 (3)发现 (3)事件 (3)阶段 (4)触摸支持发现 (4)多点触摸相关类 (4)Multitouch. 4MultitouchInputMode. 5触摸事件 (5)其它相关类 (8)GestruePhase. 8TouchScreenType. 8编写多点触摸的应用程序 (8)总结 (9)FlashPlayer多点触摸简介Adobe Flash宣布了在Player10.1和AIR2.0这两个版本上支持多点触摸操作,也就是说FP内部已经原生支持多点触摸,不需要再使用第三方的库去视觉分析以及解析手势什么的。
经过一段时间的研究,整理了一下Flash Player以及AIR中涉及到多点触摸的知识。
Flash Platform 的触摸事件处理功能包括从启用触摸的设备上一个或多个接触点的输入。
此外,Flash 运行时处理将多个触摸点与移动结合以创建动作的事件。
换句话说,Flash运行时解释两种输入类型:l 触摸使用启用触摸的设备中的单点设备(例如手指、笔针或其他工具)输入。
某些设备支持多个同步接触点(使用手指或笔针)。
l 多点触控使用多个同步接触点输入。
l 动作由设备或操作系统解释以响应一个或多个触摸事件的输入。
例如,用户同时旋转两个手指,设备或操作系统会将触摸输入解释为旋转动作。
有些动作使用一个手指或触摸点执行,而有些动作需要多个触摸点。
设备或操作系统确定要分配给输入的动作类型。
触摸和动作输入都可以是多点触控输入,具体取决于用户的设备。
ActionScript 提供了相应API,用于处理触摸事件、动作事件以及针对多点触控输入单独跟踪的触摸事件。
触摸输入的基础知识当 Flash Platform 在支持触摸输入的环境中运行时,InteractiveObject 实例可以侦听触摸事件并调用处理函数。
android gesturedetector原理 -回复
android gesturedetector原理-回复"Android GestureDetector原理"是指Android中用于检测手势的类。
该类提供了一组方法,用于检测和处理用户在屏幕上的手势操作。
在本文中,我们将一步一步地回答关于Android GestureDetector原理的问题。
第一步:介绍GestureDetector类GestureDetector类是Android提供的一个用于手势检测的工具类。
它可以识别屏幕上的各种手势操作,如滑动、缩放、旋转等。
GestureDetector 类通过触摸事件(MotionEvent)来追踪用户的手势行为。
第二步:GestureDetector类的构造函数及参数GestureDetector类的构造函数需要两个参数- Context和一个GestureDetector.OnGestureListener接口的实例。
Context参数用于获取系统服务和资源,而OnGestureListener接口则用于处理各种手势事件的回调。
第三步:GestureDetector.OnGestureListener接口的回调方法GestureDetector.OnGestureListener接口定义了一组回调方法,用于处理各种手势事件。
这些方法包括:1. onDown(MotionEvent event):用户按下屏幕时调用。
通常在这个方法中初始化手势操作。
2. onShowPress(MotionEvent event):用户按下屏幕后,但还未移动或松开时调用。
可以在这个方法中做一些临时状态的显示。
3. onSingleTapUp(MotionEvent event):用户点击屏幕时调用。
4. onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY):用户在屏幕上滑动时调用。
android中view手势滑动冲突的解决方法
android中view⼿势滑动冲突的解决⽅法Android⼿势事件的冲突跟点击事件的分发过程息息相关,由三个重要的⽅法来共同完成,分别是:dispatchTouchEvent、onInterceptTouchEvent和onTouchEvent。
public boolean dispatchTouchEvent(MotionEvent ev)这个⽅法⽤来进⾏事件的分发。
如果事件传递到view,那么这个⽅法⼀定会被调⽤,返回结果受当前View的onTouchEvent和下级View的dispatchTouchEvent⽅法的影响,表⽰是否消耗当前事件。
public boolean onInterceptTouchEvent(MotionEvent event)在上述⽅法内部调⽤,⽤来判断是拦截某个事件,如果当前View拦截了某个事件,那么在同⼀个事件序列当中,此⽅法不会被再次调⽤,返回结果表⽰是否拦截当前事件。
public boolean onTouchEvent(MotionEvent event)在dispathcTouchEvent⽅法中调⽤,⽤来处理点击事件,返回结果表⽰是否消耗当前事件,如果不消耗,则在同⼀个事件序列中,当前View⽆法再次接到事件。
例:public boolean dispatchTouchEvent(MotionEvent ev){boolean consume = false;if(onInterceptTouchEvent(ev)){consume = onTouchEvent(ev);} else {consum = child.dispathcTouchEvent(ev);}return consume;}⼿势冲突的解决⽅法就是⽤上⾯的三个⽅法;主要分为两种解决⽅法:·1外部拦截法 2内部拦截法1.常见的滑动冲突场景1.1 外部滑动⽅向和内部滑动的⽅向不⼀致这种情况我们经常遇见,⽐如使⽤viewpaper+listview时,在这种效果中,可以通过左右滑动切换页⾯,⽽每⼀个页⾯往往⼜是⼀个listview,本来在这种情况下是有冲突的,但是Viewpaper内部处理了这个滑动冲突,因此采⽤viewpaper我们⽆需关注这个问题,如果我们采⽤的不是Viewpaper⽽是ScrollView等,那么必须⼿动处理滑动冲突,否则内外两层只能有⼀层滑动,那就是滑动冲突。
Android三种左右滑动效果 手势识别
ViewCode
4、数据适配器和页面切换事件监听器
5、在指引页面更改事件监听器(GuidePageChangeListener)中要确保在切换页
面时下面的圆点图片也跟着改变
ViewCode
工程下载:MyAndroidFlip.rar
来自:cnblogs/hanyonglu/archive/2012/04/07/2435589.html
3、加入权限
4、在Activity中,初ቤተ መጻሕፍቲ ባይዱ化左右悬浮按钮,创建左右按钮,并设置监听事件
(替换图片);
ViewCode
5、重写onTouchEvent事件,用于触发显示和隐藏悬浮按钮事件
(MotionEvent.ACTION_DOWN和MotionEvent.ACTION_UP);
6、利用线程,控制悬浮按钮的透明度(Alpha和invalidate)
tips:感谢大家的阅读,本文由我司收集整编。仅供参阅!
坐标差判断左右滑动,同时在里面写滑动的效果。
ViewCode
工程下载:GuideViewTest.rar
来自:cnblogs/hanyonglu/archive/2012/02/13/2349827.html
左右滑动指引效果1、加入android-support-v4.jar,关于android-support-v4.jar
的详细信息,大家可以访问google官方网站:
developer.android/sdk/compatibility-library.html;
2、XML中,用FrameLayout完成布局,放入ViewPager和指引图标
ViewCode
3、将页面布局加入View的列表中,有几个布局页面就有几个圆点图片,通
Android开发——使用Gallery实现“多级联动”(An-Beer工作室)
Android开发——使用Gallery实现“多级联动”2010-08-07 09:14 by HalZhang, 578 visits, 网摘, 收藏, 编辑本文将讲解利用两个Gallery实现类似多级联动的功能。
先看图:,一个Gallery是歌曲专辑图片,另一个Gallery是专辑的歌曲。
滑动专辑Gallery,下面的歌曲也会随之发生变动。
一、布局。
主要的布局是有两个相对布局+两个Gallery组成的:1:<?xml version="1.0"encoding="utf-8"?>2:<RelativeLayout xmlns:android="/apk/res/android"3:android:layout_width="fill_parent"4:android:layout_height="fill_parent">5:<!-- 专辑 -->6:<Gallery android:id="@+id/gallery"7:android:layout_width="fill_parent"8:android:layout_height="wrap_content"9:android:layout_alignParentTop="true"10:android:gravity="center_horizontal"11:android:spacing="16dp"12:android:unselectedAlpha="0.5"/>13:<!-- 歌曲 -->14:<Gallery android:id="@+id/gallery2"15:android:background="#FFF"16:android:layout_width="fill_parent"17:android:layout_height="30dp"18:android:layout_below="@id/gallery"19:android:layout_alignParentLeft="true"20:android:gravity="center_vertical"21:android:spacing="16dp"22:android:unselectedAlpha="0.5"/>23:</RelativeLayout>二、Gallery的适配器在android中适配器很好的实现了MVC思想,它很好的为某些组件提供了数据和view的实现。
麦子学院Android开发教程手势识别ViewFlipper触摸动画
今天我将为大家详细讲解如何实现Android主页面的左右拖动效果。
其实方法很简单,即使用ViewFlipper来将您要来回拖动的View装在一起,然后与GestureDetector手势识别类来联动,需要显示哪个View,只需加上一点动画效果即可。
比如当手指向左快速滑动时跳转到上一个View,手指向右快速滑动时跳转到下一个View,本例中使用图片作为各个View的页面,实现左右快速滑动显示不同的图片。
Android View首先来看看我们的layout,如下所示:1.<linearlayoutandroidandroid:layout_height="fill_parent"android:layout_width="fill_pare nt"android:orientation="vertical"xmlns:android="http://schemas.android.com/apk/res/android">2. <viewflipperandroidandroid:id="@+id/flipper"android:layout_below="@+id/CockpitL ayout"android:layout_height="fill_parent"android:layout_width="fill_parent">3. <include android:id="@+id/firstlayout"layout="@layout/first">4. <include android:id="@+id/secondlayout"layout="@layout/second">5. <include android:id="@+id/thirdlayout"layout="@layout/third">6. <include android:id="@+id/fourthlayout"layout="@layout/fourth">7. </include></include></include></include></viewflipper>8.</linearlayout>9.如上所示,在ViewFlipper中放置多个layout(接下来会在不同的layout中来回滑动),ViewFlipper在同一个页面就显示其中一个layout。
Android使用ViewFlipper做页面切换
Android使用ViewFlipper做页面切换,与手势滑动切换的使用。
Android系统自带有一个多页面管理的控件:ViewFlipper.它可以简单实现子页面的切换,,,它只需使用addView方法添加几个View,每个View对应的是一个页面,即可完成对于多页面的管理,,,在android上实现手势的识别也比较简单,可以实现OnTouchListener和OnGuestureListener接口,然后在OnTouch函数中注册GestureDetector来判别手势动作,参考一位大牛的文章:/blog/572886GestureDetector.OnGestureListener:用来通知普通的手势事件,该接口有如下六个回调函数:1. onDown(MotionEvent e):down事件;2. onSingleTapUp(MotionEvent e):一次点击up事件;3. onShowPress(MotionEvent e):down事件发生而move或则up还没发生前触发该事件;4. onLongPress(MotionEvent e):长按事件;5. onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY):滑动手势事件;6. onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY):在屏幕上拖动事件。
主要判断是在onFling()函数里面,e1表示开始按下去的位置信息,e2表示抬起时的位置信息,因此可以通过它们在x轴上面的距离差来是左滑还是右滑。
[java]view plaincopyprint?1. public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,2. float velocityY) {3. // TODO Auto-generated method stub4. if (e2.getX()-e1.getX() > 100) {5. // fling right6. showNextView();7. } else if (e1.getX() - e2.getX() > 100) {8. // fling left9. showPreviousView();10. }11. return false;12. }1. <?xml version="1.0"encoding="utf-8"?>2. <LinearLayout3. xmlns:android="/apk/res/android"4. android:orientation="vertical"5. android:layout_width="fill_parent"6. android:layout_height="fill_parent">7. <LinearLayout8. xmlns:android="/apk/res/android"9. android:orientation="horizontal"10. android:layout_width="fill_parent"11. android:layout_height="wrap_content">12. <Button13. android:id="@+id/btnPrev"14. android:text="Previous"15. android:layout_width="wrap_content"16. android:layout_height="wrap_content"/>17. <Button18. android:id="@+id/btnNext"19. android:text="Next"20. android:layout_width="wrap_content"21. android:layout_height="wrap_content"/>22. </LinearLayout>23. <ViewFlipper24. android:id="@+id/vfFlingTest"25. android:layout_width="fill_parent"26. android:layout_height="fill_parent"></ViewFlipper>27. </LinearLayout>1. package com.sf.learn;2. import android.app.Activity;3. import android.os.Bundle;4. import android.view.GestureDetector;5. import android.view.KeyEvent;6. import android.view.MotionEvent;7. import android.view.View;8. import android.view.GestureDetector.OnGestureListener;9. import android.view.View.OnClickListener;10. import android.view.View.OnTouchListener;11. import youtParams;12. import android.view.animation.AnimationUtils;13. import android.widget.Button;14. import android.widget.EditText;15. import android.widget.ImageView;16. import android.widget.TextView;17. import android.widget.ViewFlipper;18. public class FlingTest extends Activity implements19. OnTouchListener, OnGestureListener{20. private Button btnPrev;21. private Button btnNext;22. private ViewFlipper vfFlingT est;23.24. private TextView tvFlipper;25. private EditText etFlipper;26. private ImageView ivFlipper;27.28. private GestureDetector mGestureDetector;29.30. @Override31. protected void onCreate(Bundle savedInstanceState) {32. // TODO Auto-generated method stub33. super.onCreate(savedInstanceState);34. setContentView(yout.fling_test);35.36. btnPrev = (Button)findViewById(R.id.btnPrev);37. btnNext = (Button)findViewById(R.id.btnNext);38. vfFlingTest = (ViewFlipper)findViewById(R.id.vfFlingTest);39.40. initViews();41.42. vfFlingTest.addView(tvFlipper);43. vfFlingTest.addView(etFlipper);44. vfFlingTest.addView(ivFlipper);45.46. vfFlingTest.setOnTouchListener(this);47. vfFlingTest.setLongClickable(true);48. mGestureDetector = new GestureDetector(this);49.50. btnPrev.setOnClickListener(new OnClickListener() {51.52. public void onClick(View v) {53. // TODO Auto-generated method stub54. showPreviousView();55. }56. });57.58. btnNext.setOnClickListener(new OnClickListener() {59.60. public void onClick(View v) {61. // TODO Auto-generated method stub62. showNextView();63. }64. });65. }66.67. public void showPreviousView() {68. vfFlingTest.setInAnimation(AnimationUtils.loadAnimation(69. this, R.anim.slide_right_in));70. vfFlingTest.setOutAnimation(AnimationUtils.loadAnimation(71. this, R.anim.slide_left_out));72. vfFlingTest.showPrevious();73. }74.75. public void showNextView() {76. vfFlingTest.setInAnimation(AnimationUtils.loadAnimation(77. this, R.anim.slide_left_in));78. vfFlingTest.setOutAnimation(AnimationUtils.loadAnimation(79. this, R.anim.slide_right_out));80. vfFlingTest.showNext();81. }82.83. private void initViews() {84. tvFlipper = new TextView(this);85. tvFlipper.setText("this is a text view!");86.87. etFlipper = new EditT ext(this);88. etFlipper.setText("this is a text view!");89.90. ivFlipper = new ImageView(this);91. ivFlipper.setLayoutParams(new LayoutParams(92. LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));93. ivFlipper.setImageResource(R.drawable.pic1);94. }95. @Override96. protected void onDestroy() {97. // TODO Auto-generated method stub98. android.os.Process.killProcess(android.os.Process.myPid());99. super.onDestroy();100. }101. @Override102. public boolean onKeyDown(int keyCode, KeyEvent event) {103. // TODO Auto-generated method stub104. if (keyCode == KeyEvent.KEYCODE_BACK) {105. finish();106. return true;107. }108. return super.onKeyDown(keyCode, event);109. }110. public boolean onTouch(View view, MotionEvent event) {111. // TODO Auto-generated method stub112. return mGestureDetector.onTouchEvent(event);113. }114.115. public boolean onDown(MotionEvent arg0) {116. // TODO Auto-generated method stub117. return false;118. }119. public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 120. float velocityY) {121. // TODO Auto-generated method stub122. if (e2.getX()-e1.getX() > 100) {123. // fling right124. showNextView();125. } else if (e1.getX() - e2.getX() > 100) {126. // fling left127. showPreviousView();128. }129. return false;130. }131. public void onLongPress(MotionEvent e) {132. // TODO Auto-generated method stub133.134. }135. public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, 136. float distanceY) {137. // TODO Auto-generated method stub138. return false;139. }140. public void onShowPress(MotionEvent e) {141. // TODO Auto-generated method stub142.143. }144. public boolean onSingleTapUp(MotionEvent e) {145. // TODO Auto-generated method stub146. return false;147. }148. }1. <?xml version="1.0"encoding="utf-8"?>2. <set xmlns:android="/apk/res/android">3. <translate4. android:fromXDelta="0%p"5. android:toXDelta="100%p"6. android:duration="1000"/>7. </set>。
A0506GestureListener
手势处理知识解析利用触摸屏的Fling、Scroll等Gesture(手势)操作来操作会使得应用程序的用户体验大大提升,比如用Scroll手势在浏览器中滚屏,用Fling在阅读器中翻页等。
在Android中,手势的识别是通过GestureDetector.OnGestureListener接口来实现的。
它有一些用于处理手势的方法需要被覆盖:●boolean onDown(MotionEvent e):用户轻触触摸屏,由1个MotionEvent ACTION_DOWN触发● void onShowPress(MotionEvent e):用户轻触触摸屏,尚未松开或拖动,由一个1个MotionEventACTION_DOWN触发● boolean onSingleTapUp(MotionEvente):用户(轻触触摸屏后)松开,由一个1个MotionEventACTION_UP触发●boolean onFling(MotionEvent e1, MotionEvent e2, floatvelocityX,floatvelocityY):用户按下触摸屏、快速移动后松开,由1个MotionEventACTION_DOWN, 多个ACTION_MOVE, 1个ACTION_UP触发⏹e1:第1个ACTION_DOWN MotionEvent⏹e2:最后一个ACTION_MOVE MotionEvent⏹velocityX:X轴上的移动速度,像素/秒⏹velocityY:Y轴上的移动速度,像素/秒●void onLongPress(MotionEvente):用户长按触摸屏,由多个MotionEvent ACTION_DOWN触发●boolean onScroll(MotionEvent e1, MotionEvent e2, floatdistanceX,floatdistanceY):用户按下触摸屏,并拖动,由1个MotionEventACTION_DOWN, 多个ACTION_MOVE触发使用GestureListener1. 实现OnGestureListener,实现相关的方法2.在需要使用手势识别的组件上调用setOnTouchListener()方法注册监听器在OnTouchListener的onTouch()方法中,将触摸事件转交给GestureDetec tor的onTouchEvent方法来处理3.在组件上使用setLongClickable(true),使其能接受长按事件(必须要有)也可以在对应组件的XML中使用android:longClickable="true"来实现功能演示实战操作public class MainActivity extends Activity implements OnGestureListener, OnTouchListener {ImageView iv;private GestureDetector mGestureDetector;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);mGestureDetector = new GestureDetector(this, this);iv = (ImageView) findViewById(R.id.imageView1);iv.setOnTouchListener(this);// 要让其可以接受手势滑动,必须让其能接受长按事件iv.setLongClickable(true);}@Overridepublic boolean onDown(MotionEvent arg0) {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {android.util.Log.e("", e1.getX() + "....." +e2.getX());// TODO Auto-generated method stubif (e1.getX() - e2.getX() > 20) {iv.setImageResource(R.drawable.lrzx);} else if (e1.getX() - e2.getX() < -20) {iv.setImageResource(R.drawable.nyn);}return false;}@Overridepublic void onLongPress(MotionEvent e) {// TODO Auto-generated method stub}@Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {// TODO Auto-generated method stubandroid.util.Log.e("", "Scroll...");return false;}@Overridepublic void onShowPress(MotionEvent e) {// TODO Auto-generated method stub}@Overridepublic boolean onSingleTapUp(MotionEvent e) {// TODO Auto-generated method stubreturn false;}// OnTouchListener的方法@Overridepublic boolean onTouch(View v, MotionEvent event) {// 转交给OnGestureListener的onTouchEvent()处理return mGestureDetector.onTouchEvent(event);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return false;}}职业素质利用触摸屏的Fling、Scroll等Gesture(手势)操作来操作会使得应用程序的用户体验大大提升,比如用Scroll手势在浏览器中滚屏,用Fling在阅读器中翻页等。
android手势操作滑动效果触摸屏事件处理
android手势操作滑动效果触摸屏事件处理精品文章学分+5很多时候,利用触摸屏的Fling、Scroll等Gesture(手势)操作来操作会使得应用程序的用户体验大大提升,比如用Scroll手势在浏览器中滚屏,用Fling在阅读器中翻页等。
在Android系统中,手势的识别是通过GestureDetector.OnGestureListener接口来实现的,不过William翻遍了Android的官方文档也没有找到一个相关的例子,API Demo中的TouchPaint也仅仅是提到了onTouch事件的处理,没有涉及到手势。
Android Developer讨论组里也有不少人有和我类似的问题,结合他们提到的方法和我所做的实验,我将给大家简单讲述一下Android中手势识别的实现。
我们先来明确一些概念,首先,Android的事件处理机制是基于Listener(监听器)来实现的,比我们今天所说的触摸屏相关的事件,就是通过onTouchListener。
其次,所有View的子类都可以通过setOnTouchListener()、setOnKeyListener()等方法来添加对某一类事件的监听器。
第三,Listener一般会以Interface(接口)的方式来提供,其中包含一个或多个abstract(抽象)方法,我们需要实现这些方法来完成onTouch()、onKey()等等的操作。
这样,当我们给某个view设置了事件Listener,并实现了其中的抽象方法以后,程序便可以在特定的事件被dispatch到该view的时候,通过callbakc函数给予适当的响应。
看一个简单的例子,就用最简单的TextView来说明(事实上和ADT中生成的skeleton 没有什么区别)。
Java代码view plaincopy to clipboardprint?01.public class GestureTest extends Activity implements OnTouchListener{02.03.@Override04.protected void onCreate(Bundle savedInstanceState) {05.super.onCreate(savedInstanceState);06. setContentView(yout.main);07.08. // init TextView09. TextView tv = (TextView) findViewById(R.id.page);10.11. // set OnTouchListener on TextView12. tv.setOnTouchListener(this);13.14. // show some text15. tv.setText(R.string.text);16.}17.18.@Override19.public boolean onTouch(View v, MotionEvent event) {20. Toast.makeText(this, "onTouch", Toast.LENGTH_SHORT).show();21. return false;22.}public class GestureTest extends Activity implements OnTouchListener{ @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);// init TextViewTextView tv = (TextView) findViewById(R.id.page);// set OnTouchListener on TextViewtv.setOnTouchListener(this);// show some texttv.setText(R.string.text);}@Overridepublic boolean onTouch(View v, MotionEvent event) {Toast.makeText(this, "onTouch", Toast.LENGTH_SHORT).show();return false;}我们给TextView的实例tv设定了一个onTouchListener,因为GestureTest类实现了OnTouchListener 接口,所以简单的给一个this作为参数即可。
Android 滑动切换页面 以及屏幕手势
手机进入智能机时代,触摸屏也已成为主流之势,原来的手机按键也被屏幕点触取代,滑动屏幕操作则相对屏幕点击更能获得用户的青睐,习惯了各种浏览器的鼠标手势、pad等平板的切滑、类似iReader的软件丰富的手势后,是不是也想自己的软件能够用食指炫起来呢,下面就让我们来看看android的手势操作吧先介绍下左右滑动切换Activity,对于复杂的手势原理一样,具体后述。
主要原理为监控触屏事件和手势事件,在触屏事件处理函数中调用手势事件处理函数,表示用户触屏后是否有手势操作,有则进行手势事件处理,大致分为四步1、需要继承OnGestureListener和OnDoubleTapListener,如下:Java代码1public class ViewSnsActivity extends Activity implements OnTouchListener, OnGestureListener这两个类分别是触屏监听器和手势监控器,具体可查看OnTouchListener和OnGestureListener2、在添加mGestureDetector的定义,并在ViewSnsActivity的onCreate函数中加入其页面布局的setOnTouchListener事件Java代码2GestureDetector mGestureDetector;Java代码3public void onCreate(Bundle savedInstanceState) {4super.onCreate(savedInstanceState);5setContentView(yout.view_sns_activity);67mGestureDetector = new GestureDetector((OnGestureListener) this);8LinearLayout viewSnsLayout = (LinearLayout)findViewById(R.id.viewSnsLayout);9viewSnsLayout.setOnTouchListener(this);10viewSnsLayout.setLongClickable(true);11}mGestureDetector为手势监听对象,下面的OnFling就是为其实现,用来处理手势的viewSnsLayout.setOnTouchListener(this);表示viewSnsLayout这个layout的触屏事件由下面的OnTouch处理3、重载onFling函数Java代码12private int verticalMinDistance = 20;13private int minVelocity = 0;1415public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, floatvelocityY) {1617if(e1.getX() - e2.getX() > verticalMinDistance && Math.abs(velocityX) >minVelocity) {1819// 切换Activity20// Intent intent = new Intent(ViewSnsActivity.this,UpdateStatusActivity.class);21// startActivity(intent);22Toast.makeText(this, "向左手势", Toast.LENGTH_SHORT).show();23} else if (e2.getX() - e1.getX() > verticalMinDistance && Math.abs(velocityX) >minVelocity) {2425// 切换Activity26// Intent intent = new Intent(ViewSnsActivity.this, UpdateStatusActivity.class);27// startActivity(intent);28Toast.makeText(this, "向右手势", Toast.LENGTH_SHORT).show();29}3031return false;32}OnFling的四个参数意思分别为Xml代码33e1 The first down motion event that started the fling.手势起点的移动事件34e2 The move motion event that triggered the current onFling.当前手势点的移动事件35velocityX The velocity of this fling measured in pixels per second along the x axis.每秒x轴方向移动的像素36velocityY The velocity of this fling measured in pixels per second along the y axis.每秒y轴方向移动的像素说的更简单点就是,鼠标手势相当于一个向量(当然有可能手势是曲线),e1为向量的起点,e2为向量的终点,velocityX为向量水平方向的速度,velocityY为向量垂直方向的速度Java代码37if(e1.getX() - e2.getX() > verticalMinDistance && Math.abs(velocityX) > minVelocity)则上面的语句能知道啥意思了吧,就是说向量的水平长度必须大于verticalMinDistance,并且水平方向速度大于minVelocity从而我们可以如此判断手势是否满足一定的条件从而进行相应响应,也可以根据这个写出更复杂的手势判断。
详解Android滑动手势具体识别方法
详解Android滑动手势具体识别方法Android SDK提供了一个listener类来侦测各种不同的手势:SimpleOnGestureListener. 你只需要实现自己所关心的手势就可以了.Swipe在android里面是叫Fling首先创建自己的一个手势detector类:class MyGestureDetector extends SimpleOnGestureListener {1.@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2,float velocityX, float velocityY) {2.}一个Android滑动手势有几个特征, 比如是在x或者y轴上近乎直线的划动, 中途路径的偏差不能太大, 而且划动需要一定的速度, 所以我们定义几个定量:private static final int SWIPE_MIN_DISTANCE = 120;1.private static final int SWIPE_MAX_OFF_PATH = 250;2.private static final intSWIPE_THRESHOLD_VELOCITY = 200;然后在onFling方法中, 判断是不是一个合理的swipe动作:if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {1.viewFlipper.setInAnimation(slideLeftIn);viewFlipper.setOutAnimation(slideLeftOut);2.viewFlipper.showNext();} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE &&Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {3.viewFlipper.setInAnimation(slideRightIn);viewFlipper.setOutAnimation(slideRightOut);4.viewFlipper.showPrevious();}5.if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE &&Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {viewFlipper.setInAnimation(slideLeftIn);6.viewFlipper.setOutAnimation(slideLeftOut);viewFlipper.showNext();7.} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE &&Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {viewFlipper.setInAnimation(slideRightIn);8.viewFlipper.setOutAnimation(slideRightOut);viewFlipper.showPrevious();9.}这里的viewFlipper是含有多个view的一个container, 可以很方便的调用prev/next view, 加上animation动画, 可以达到一些不错的效果:viewFlipper =(ViewFlipper)findViewById(R.id.flipper); slideLeftIn =AnimationUtils.loadAnimation(this, R.anim.slide_left_in);1.slideLeftOut = AnimationUtils.loadAnimation(this, R.anim.slide_left_out);slideRightIn = AnimationUtils.loadAnimation(this, R.anim.slide_right_in);2.slideRightOut = AnimationUtils.loadAnimation(this, R.anim.slide_right_out);自定义的animation可以查看具体的XML, 比如从左边进来的一个动画:<set xmlns:android="http://schemas./apk/res/android">1.<translate android:fromXDelta="100%p"android:toXDelta="0"android:duration="800"/>2.< /set>当然最后不要忘记在你的Activity中override onTouch方法来获取手势action:@Override1.public boolean onTouchEvent(MotionEvent event) {if (gestureDetector.onTouchEvent(event))2.return true;else3.return false;4.}在Android手机操作系统中支持各种滑动手势的操作。
Android 中的 Animation(An-Better工作室)
Android 中的Animation 应用(一)Android 2010-07-06 15:29:10 阅读275 评论0 字号:大中小订阅最近在应用中用到了Animation 。
在网上浏览了下,感觉有些东西讲得很精辟。
因此,我想总结下。
Drawable 最强大的功能是:显示Animation。
Android SDK介绍了2种Animation:∙Tween Animation(渐变动画):通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果∙Frame Animation(帧动画) :顺序播放事先做好的图像,类似放电影在使用Animation前,我们先学习如何定义Animation,这对我们使用Animation会有很大的帮助。
Animation 是以XML格式定义的,定义好的XML文件存放在res\anim中。
由于Tween Animation与Frame Animation 的定义、使用都有很大的差异,我们将分开介绍,本篇幅中介绍Tween Animation的定义与使用,后续篇幅再详细介绍Frame Animation。
按照XML文档的结构【父节点,子节点,属性】来介绍Tween Animation,其由4种类型:∙Alpha:渐变透明度动画效果∙Scale:渐变尺寸伸缩动画效果∙Translate:画面转换位置移动动画效果∙Rotate:画面转换位置移动动画效果在介绍以上4种类型前,先介绍Tween Animation共同的节点属性。
看了以上节点,大家是不是都想开始定义动画了。
下面我们就开始结合具体的例子,介绍4种类型各自特有的节点元素。
按照上面的讲述学习完了Tween Animation的定义,对Tween Animation有了详细的了解,再去了解下Android SDK的animation package(android.view.animation),其提供了操作Tween Animation所有的类。
Android手势识别器GestureDetector使用详解
Android⼿势识别器GestureDetector使⽤详解以前只知道控件的onTouchEvent()事件,它的动作有MotionEvent.ACTION_DOWN、MotionEvent.ACTION_MOVE、MotionEvent.ACTION_UP;今天有个需求,要监听控件的双击、拖动、滑动等事件,这时onTouchEvent()很明显不能满⾜我们的需求,经多⽅打听,找到了今天的主⾓GestureDetector,下⾯就对它进⾏简单的学习。
构造⽅法:已过时的有2个,不推荐使⽤。
GestureDetector(GestureDetector.onGestureListener listener);GestureDetector(GestureDetector.onGestureListener listener,Handler handler);推荐使⽤。
GestureDeterctor(Context context,GestureDetector.onGestureListener listener);GestureDeterctor(Context context,GestureDetector.onGestureListener listener,Handler handler);GestureDeterctor(Context context,GestureDetector.onGestureListener listener,Handler handler,boolean unused);参数handler主要⽤来执⾏延时操作时使⽤,参数unused暂时没有使⽤。
从构成函数可以看出,当我们需要创建⼀个GestureDetector对象时,必须给它传⼀个GestureDetector.onGestureListener对象,查看API之后,发现它是个接⼝(interface),创建GestureDetector.onGestureListener的对象时,必须实现⼀下⼏个⽅法:1、onDown(MotionEvent e);当⽤户按下时的回调。
Android中触摸事件传递分发机制
Android中触摸事件传递分发机制触摸事件用MotionEvent表示,在Android中,一个触摸事件从产生到最终起作用,是一个很复杂的过程,但思路还是很清晰的,就是一层一层的传递,通过一个boolean值判断是否拦截或者消耗(也就是使用掉这个事件)。
下面从基础的事件产生过程开始梳理整个流程:事件的类型:一般使用手机,在屏幕上的操作就是点击或滑动,所以一般触摸事件分为两类:•点击事件:ACTION_DOWN–>ACTION_UP•滑动事件:ACTION_DOWN–>ACTION_MOVE–>ACTION_MOVE … … –>ACTION_UP可以看到,事件的开始都是ACTION_DOWN,结束是ACTION_UP。
滑动事件相比点击事件,多了n个ACTION_MOVE事件,也就是滑动过程中手指与屏幕的交互,其他就没什么区别了。
事件的传递过程:在Android中,Activity作为界面显示的基础,通常用来接收触摸事件,然后分发给界面中的视图控件。
当一个触摸事件产生时,最先传递给当前Activity,然后由Activity内部的Window将事件传递给DecorView(也就是当前屏幕显示的界面的底层容器)接下来就是在开发者编写的ViewGroup和View中传递了,所以整理下事件传递过程如下图:从图中可以看到,由于DecorView继承自FrameLayout,所以它是一个ViewGroup,ContentView也是一个ViewGroup,因此,整个传递过程可以简化为三个步骤:Activity—->ViewGroup…—->View也就是从Activity传递到ViewGroup,再经过n步的ViewGroup 之间传递,最终传递给View。
事件传递的代码实现:将以上传递规则通过代码实现,主要涉及到以下三个方法:•dispatchTouchEvent():分发触摸事件,默认返回super.dispatchTouchEvent(ev),事件向上分发。
androidview的gesturerecognizers
androidview的gesturerecognizers【原创版】目录1.Android View 的 GestureRecognizers 简介2.添加手势识别器3.监听手势事件4.手势识别器的类型5.示例:使用 GestureRecognizer 检测用户手势正文【1.Android View 的 GestureRecognizers 简介】在 Android 开发中,我们常常需要为 View 添加手势识别功能,以便在用户进行特定手势操作时执行相应的操作。
为了实现这一需求,Android 提供了 GestureRecognizers 类,可以让我们轻松地为 View 添加手势识别器。
【2.添加手势识别器】要在 Android View 中添加手势识别器,我们需要先创建一个GestureRecognizer 对象。
常见的手势识别器类型有:- OnTouchEventGestureRecognizer:用于识别触摸屏上的手势,如点击、滑动等。
- OnGestureListenerGestureRecognizer:用于识别基于 Android 3.0(API 级别 11)的 MotionEvent.GESTURE_事件。
下面是一个创建 OnTouchEventGestureRecognizer 的示例:```javaView view = findViewById(R.id.my_view);gestureDetector = new GestureDetector(this, new OnTouchEventGestureRecognizer(this));view.setGestureDetector(gestureDetector);```【3.监听手势事件】为了响应手势事件,我们需要重写 onGestureEvent 方法。
在这个方法中,我们可以根据传入的 MotionEvent 对象判断用户执行了哪种手势,并执行相应的操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Android手势识别ViewFlipper触摸动画2010-11-01 09:46 ideasandroid ideasandroid 我要评论(0)字号:T | T今天给大家介绍一下如何实现Android主页面的左右拖动效果。
使用ViewFlipper来将您要来回拖动的View装在一起,然后与GestureDetector手势识别类来联动,确定要显示哪个View,加上一点点动画效果即可。
标签:View AndroidAD:限时报名参加“甲骨文全球大会·2010·北京”及“JavaOne和甲骨文开发者大会2010”我们曾介绍过“在Android开发中使用Gallery实现'多级联动'”和“在Android中实现service动态更新UI界面”。
今天给大家介绍一下如何实现Android主页面的左右拖动效果。
实现起来很简单,就是使用ViewFlipper来将您要来回拖动的View装在一起,然后与GestureDetector手势识别类来联动,确定要显示哪个View,加上一点点动画效果即可。
比如当手指向左快速滑动时跳转到上一个View,手指向右快速滑动时跳转到下一个View,本例中使用图片作为各个View的页面,实现左右快速滑动显示不同的图片。
Android View首先来看看我们的layout,如下所示:1.<linearlayout android android:layout_height="fill_parent"android:layout_width="fill_parent"android:orientation="vertical"xmlns:android="http :///apk/res/android">2.<viewflipper android android:id="@+id/flipper"android:layout_below="@+id/CockpitLayout"android:layout_height="fill_parent"android:layout_width="fill_parent">3.<include android:id="@+id/firstlayout"layout="@layout/first">4.<include android:id="@+id/secondlayout"layout="@layout/second">5.<include android:id="@+id/thirdlayout"layout="@layout/third">6.<include android:id="@+id/fourthlayout"layout="@layout/fourth">7.</include></include></include></include></viewflipper>8.</linearlayout>9.如上所示,在ViewFlipper中放置多个layout(接下来会在不同的layout中来回滑动),ViewFlipper在同一个页面就显示其中一个layout。
ViewFlipper中的四个layout很简单,我们就放置一张图片,如下所示:1.<linearlayout android android:gravity="center_vertical"android:layout_height="fill_parent"android:layout_width="fill_parent"xmlns:android="h ttp:///apk/res/android">2.<imageview android android:layout_height="wrap_content"android:layout_width="wrap_content"android:src="@drawable/v1">3.</imageview></linearlayout>4.接下来我们来看看Activity,我们的Activity需要实现两个接口OnGestureListener,OnTouchListener。
具体的代码如下所示,代码中都有相应的注释,这里就不再详述。
1.package com.ideasandroid.demo;2.import android.app.Activity;3.import android.os.Bundle;4.import android.view.GestureDetector;5.import android.view.MotionEvent;6.import android.view.View;7.import android.view.GestureDetector.OnGestureListener;8.import android.view.View.OnTouchListener;9.import android.view.animation.AccelerateInterpolator;10.import android.view.animation.Animation;11.import android.view.animation.TranslateAnimation;12.import android.widget.ViewFlipper;13.public class ViewFlipperDemo extends Activity implementsOnGestureListener,OnTouchListener{14. private ViewFlipper mFlipper;15. GestureDetector mGestureDetector;16. private int mCurrentLayoutState;17. private static final int FLING_MIN_DISTANCE = 100;18. private static final int FLING_MIN_VELOCITY = 200;19.20. @Override21. public void onCreate(Bundle savedInstanceState) {22. super.onCreate(savedInstanceState);23. setContentView(yout.main);24.mFlipper = (ViewFlipper) findViewById(R.id.flipper);25. //注册一个用于手势识别的类26.mGestureDetector = new GestureDetector(this);27. //给mFlipper设置一个listener28. mFlipper.setOnTouchListener(this);29.mCurrentLayoutState = 0;30. //允许长按住ViewFlipper,这样才能识别拖动等手势31. mFlipper.setLongClickable(true);32. }33.34. /**35. * 此方法在本例中未用到,可以指定跳转到某个页面36. * @param switchTo37. */38. public void switchLayoutStateTo(int switchTo) {39. while (mCurrentLayoutState != switchTo) {40. if (mCurrentLayoutState > switchTo) {41. mCurrentLayoutState--;42. mFlipper.setInAnimation(inFromLeftAnimation());43. mFlipper.setOutAnimation(outToRightAnimation());44. mFlipper.showPrevious();45. } else {46. mCurrentLayoutState++;47. mFlipper.setInAnimation(inFromRightAnimation());48. mFlipper.setOutAnimation(outToLeftAnimation());49. mFlipper.showNext();50. }51.52. }53. ;54. }55.56. /**57. * 定义从右侧进入的动画效果58. * @return59. */60. protected Animation inFromRightAnimation() {61. Animation inFromRight = new TranslateAnimation(62. Animation.RELATIVE_TO_PARENT, +1.0f,63. Animation.RELATIVE_TO_PARENT, 0.0f,64. Animation.RELATIVE_TO_PARENT, 0.0f,65. Animation.RELATIVE_TO_PARENT, 0.0f);66. inFromRight.setDuration(500);67. inFromRight.setInterpolator(new AccelerateInterpolator());68. return inFromRight;69. }70.71. /**72. * 定义从左侧退出的动画效果73. * @return74. */75. protected Animation outToLeftAnimation() {76. Animation outtoLeft = new TranslateAnimation(77. Animation.RELATIVE_TO_PARENT, 0.0f,78. Animation.RELATIVE_TO_PARENT, -1.0f,79. Animation.RELATIVE_TO_PARENT, 0.0f,80. Animation.RELATIVE_TO_PARENT, 0.0f);81. outtoLeft.setDuration(500);82. outtoLeft.setInterpolator(new AccelerateInterpolator());83. return outtoLeft;84. }85.86. /**87. * 定义从左侧进入的动画效果88. * @return89. */90. protected Animation inFromLeftAnimation() {91. Animation inFromLeft = new TranslateAnimation(92. Animation.RELATIVE_TO_PARENT, -1.0f,93. Animation.RELATIVE_TO_PARENT, 0.0f,94. Animation.RELATIVE_TO_PARENT, 0.0f,95. Animation.RELATIVE_TO_PARENT, 0.0f);96. inFromLeft.setDuration(500);97. inFromLeft.setInterpolator(new AccelerateInterpolator());98. return inFromLeft;99. }100.101. /**102. * 定义从右侧退出时的动画效果103. * @return104. */105. protected Animation outToRightAnimation() {106. Animation outtoRight = new TranslateAnimation(107. Animation.RELATIVE_TO_PARENT, 0.0f,108. Animation.RELATIVE_TO_PARENT, +1.0f,109. Animation.RELATIVE_TO_PARENT, 0.0f,110. Animation.RELATIVE_TO_PARENT, 0.0f);111. outtoRight.setDuration(500);112. outtoRight.setInterpolator(new AccelerateInterpolator()); 113. return outtoRight;114. }115.116. public boolean onDown(MotionEvent e) {117. // TODO Auto-generated method stub118. return false;119. }120.121. /*122. * 用户按下触摸屏、快速移动后松开即触发这个事件123. * e1:第1个ACTION_DOWN MotionEvent124. * e2:最后一个ACTION_MOVE MotionEvent125. * velocityX:X轴上的移动速度,像素/秒126. * velocityY:Y轴上的移动速度,像素/秒127. * 触发条件:128. * X轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY个像素/秒129. */130. public boolean onFling(MotionEvent e1, MotionEvent e2, floatvelo cityX,131. float velocityY) {132. if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE133. && Math.abs(velocityX) > FLING_MIN_VELOCITY) { 134. // 当像左侧滑动的时候135. //设置View进入屏幕时候使用的动画136. mFlipper.setInAnimation(inFromRightAnimation());137. //设置View退出屏幕时候使用的动画138. mFlipper.setOutAnimation(outToLeftAnimation());139. mFlipper.showNext();140. } else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE141. && Math.abs(velocityX) > FLING_MIN_VELOCITY) {142. // 当像右侧滑动的时候143. mFlipper.setInAnimation(inFromLeftAnimation());144. mFlipper.setOutAnimation(outToRightAnimation());145. mFlipper.showPrevious();146. }147. return false;148. }149.150. public void onLongPress(MotionEvent e) {151. // TODO Auto-generated method stub152.153. }154.155. public boolean onScroll(MotionEvent e1, MotionEvent e2, floatdis tanceX,156. float distanceY) {157. return false;158. }159.160. public void onShowPress(MotionEvent e) {161. // TODO Auto-generated method stub162.163. }164.165. public boolean onSingleTapUp(MotionEvent e) {166. // TODO Auto-generated method stub167. return false;168. }169. public boolean onTouch(View v, MotionEvent event) {170. // 一定要将触屏事件交给手势识别类去处理(自己处理会很麻烦的)171. return mGestureDetector.onTouchEvent(event);172. }173.}174.希望本文对您有所帮助!。