通过Gesture的监听我们将实现一个,手指的快速滑动显示坐标的变化,我们先来看一看效果图:

1.Android中手势交互的执行顺序

  • 1.手指触碰屏幕时,触发MotionEvent事件!
  • 2.该事件被OnTouchListener监听,可在它的onTouch()方法中获得该MotionEvent对象!
  • 3.通过GestureDetector转发MotionEvent对象给OnGestureListener
  • 4.我们可以通过OnGestureListener获得该对象,然后获取相关信息,以及做相关处理!

这三个经常用到的类的作用:

  • MotionEvent: 这个类用于封装手势、触摸笔、轨迹球等等的动作事件。其内部封装了两个重要的属性X和Y,这两个属性分别用于记录横轴和纵轴的坐标。

  • GestureDetector: 识别各种手势。

  • OnGestureListener: 这是一个手势交互的监听接口,其中提供了多个抽象方法,并根据GestureDetector的手势识别结果调用相对应的方法。

2.GestureListener详解:

从1中我们知道了监听手势的关键是:GestureListener他给我们提供了下述的回调方法:

  • 按下(OnDown): 刚刚手指接触到触摸屏的那一刹那,就是触的那一下。
  • 抛掷(OnFling): 手指在触摸屏上迅速移动,并松开的动作。
  • 长按(OnLongPress): 手指按在持续一段时间,并且没有松开。
  • 滚动(OnScroll): 手指在触摸屏上滑动。
  • 按住(OnShowPress): 手指按在触摸屏上,它的时间范围在按下起效,在长按之前。
  • 抬起(OnSingleTapUp):手指离开触摸屏的那一刹那。

上述资料的来源:http://www.runoob.com/w3cnote/android-tutorial-gestures.html

3.xamarin android gestues的简单用法

编辑布局页Main.axml 内容如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_show"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:text="随便一按,你的坐标变化是:"
android:textColor="#ff0000"
android:textSize="30dp"
/>
</LinearLayout>

编辑MainActivity.cs,使得它实现   Android.Views.GestureDetector.IOnGestureListener    并通过该接口所需要的方法。更多的功能将被添加到该OnFling方法进一步上。注意重写了方法OnTouchEvent

using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Debug = System.Diagnostics.Debug;
namespace Gestures
{
[Activity(Label = "GesturesDemo", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity,GestureDetector.IOnGestureListener
{
private GestureDetector mDetector;
private GestureDetector _gestureDetector;
TextView tv_show = null;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle); // Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
tv_show = FindViewById<TextView>(Resource.Id.tv_show);
tv_show.Text = "Fling Velocity,随便一划,坐标变化为:";
mDetector = new GestureDetector(this);
} public override bool OnTouchEvent(MotionEvent e)
{
mDetector.OnTouchEvent(e);
return false;
} public bool OnDown(MotionEvent e)
{
//onDown 按下
Debug.WriteLine("onDown 按下");
return false;
} public bool OnFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
{
//迅速滑动,并松开
Debug.Write($"OnFling随便一划,坐标变化为X:{velocityX},Y:{velocityY}");
tv_show.Text = $"OnFling随便一划,坐标变化为:X:{velocityX},Y:{velocityY}";
return false;
} public void OnLongPress(MotionEvent e)
{
Debug.Write($"长按不放");
} public bool OnScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
{
//在屏幕上滑动
Debug.Write("OnScroll:在屏幕上滑动");
return false;
} public void OnShowPress(MotionEvent e)
{
Debug.Write("OnShowPress:手指按下一段时间,还没到长按");
//手指按下一段时间,不过还没到长按
} public bool OnSingleTapUp(MotionEvent e)
{
//手指离开屏幕的一瞬间
return false;
}
}
}

好了,在设备上随手一划,就会显示坐标的变化。现在来看一下常规的手势操作对应的执行的方法

1.手指按下立即松开:

2.随手一划,化的越快OnScroll执行的次数就越少,迅速松开:

3.长按后松开:

4.按住后不放连续做滑动操作:这个在虚拟器和手机总感觉有点差别,自己试试吧

引用菜鸟上的一段总结:

PS:从上述结果来看,我们发现了一个问题:我们实现OnGestureListener需要实现所有的手势,可能我针对的仅仅是滑动,但是你还是要去重载,这显得很逗逼,是吧,官方肯定会给出解决方法滴,官方另外给我们提供了一个SimpleOnGestureListener类只需把上述的OnGestureListener替换成SimpleOnGestureListener即可!

Xamarin Android Gestures详解的更多相关文章

  1. Xamarin.Android通知详解

    一.发送通知的机制 在日常的app应用中经常需要使用通知,因为服务.广播后台活动如果有事件需要通知用户,则需要通过通知栏显示,而在Xamarin.Android下的通知需要获取Notification ...

  2. xamarin android alertdialog详解

    说明一下:学习xamarin android一段时间,准备写一些xamarin android相关的例子,alertdialog也是使用的非常多得空间之一,非常感谢鸟巢上的小猪,我也是看着他写的教程学 ...

  3. Xamarin+Prism开发详解七:Plugin开发与打包测试

    有了上章[Xamarin+Prism开发详解六:DependencyService与IPlatformInitializer的关系]的基础,现在来理解Plugin开发就简单了. 本文实例代码地址:ht ...

  4. Android Notification 详解(一)——基本操作

    Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...

  5. Android Notification 详解——基本操作

    Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...

  6. Android ActionBar详解

    Android ActionBar详解 分类: Android2014-04-30 15:23 1094人阅读 评论(0) 收藏 举报 androidActionBar   目录(?)[+]   第4 ...

  7. Android 签名详解

    Android 签名详解 AndroidOPhoneAnt设计模式Eclipse  在Android 系统中,所有安装 到 系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程 ...

  8. Android编译系统详解(一)

    ++++++++++++++++++++++++++++++++++++++++++ 本文系本站原创,欢迎转载! 转载请注明出处: http://blog.csdn.net/mr_raptor/art ...

  9. Android布局详解之一:FrameLayout

      原创文章,如有转载,请注明出处:http://blog.csdn.net/yihui823/article/details/6702273 FrameLayout是最简单的布局了.所有放在布局里的 ...

随机推荐

  1. RSA非对称加密简析-java

    1 非对称加密算法 1.1 概述 1976年,美国学者Dime和Henman为解决信息公开传送和密钥管理问题,提出一种新的密钥交换协议,允许在不安全的媒体上的通讯双方交换信息,安全地达成一致的密钥,这 ...

  2. 最大信息系数(MIC)——Detecting Novel Associations in Large Data Sets

    本文介绍了一种发现两个随机变量之间依赖关系强度的度量MIC(最大信息系数,类似于相关系数的作用).MIC具有以下性质和优势: MIC度量具有普适性.其不仅可以发现变量间的线性函数关系,还能发现非线性函 ...

  3. 编程语言的基础——搞定JavaIO

    关键字:IO基础,JUnit生命周期,字节流,字符流,字符编码,对象流,序列化,反序列化 Java I/O 流是一组有顺序的,有起点和终点的字节集合.是对设备文件间数据传输的总称和抽象. 在IO中涉及 ...

  4. js的学习(window对象的使用)

    open方法: //语法:var winObj = window.open([url][,name][,options]);  //参数:url:准备在新窗口中显示那个文件.url可以为空字符串,表示 ...

  5. MFC中小笔记(二)

    6.有三个API函数可以运行可执行文件WinExec.ShellExecute和CreateProcess.  关于这三者的概述总结,有好几篇,自己选择. 1.CreateProcess因为使用复杂, ...

  6. C#开发Windows窗体应用程序的步骤

    使用C#开发应用程序时,一般包括创建项目.界面设计.设置属性.编写程序代码.保存项目.程序运行等6个步骤. 1.创建项目 在Visual Studio2017开发环境中选择“文件”→“新建”→“项目” ...

  7. Awk,Cat,Head分析Nginx日志常用命令

    Nginx 日志分析   1.根据访问IP统计UV   awk '{print $1}'  access.log|sort | uniq -c |wc -l   2.统计访问URL统计PV   awk ...

  8. Mysql的管理及使用

    第1章 Mysql的管理 1.1 连接管理mysql mysql[options] #Linux或UNIX shell提示符(终端窗口) mysql --help #查看帮助信息 mysql --ve ...

  9. Tomcat (安装及web实现 基础)

     Tomcat服务器配置 安装:解压对应的版本就行 注意;不要把Tomcat放到有中文的和有空格的目录中 验证是否安装成功:进入安装盘的安装文件的bin目录下 执行startup bat 成功  80 ...

  10. 多线程编程学习笔记——async和await(二)

    接上文 多线程编程学习笔记——async和await(一) 三.   对连续的异步任务使用await操作符 本示例学习如何阅读有多个await方法方法时,程序的实际流程是怎么样的,理解await的异步 ...