Xamarin Android Gestures详解
通过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详解的更多相关文章
- Xamarin.Android通知详解
一.发送通知的机制 在日常的app应用中经常需要使用通知,因为服务.广播后台活动如果有事件需要通知用户,则需要通过通知栏显示,而在Xamarin.Android下的通知需要获取Notification ...
- xamarin android alertdialog详解
说明一下:学习xamarin android一段时间,准备写一些xamarin android相关的例子,alertdialog也是使用的非常多得空间之一,非常感谢鸟巢上的小猪,我也是看着他写的教程学 ...
- Xamarin+Prism开发详解七:Plugin开发与打包测试
有了上章[Xamarin+Prism开发详解六:DependencyService与IPlatformInitializer的关系]的基础,现在来理解Plugin开发就简单了. 本文实例代码地址:ht ...
- Android Notification 详解(一)——基本操作
Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...
- Android Notification 详解——基本操作
Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...
- Android ActionBar详解
Android ActionBar详解 分类: Android2014-04-30 15:23 1094人阅读 评论(0) 收藏 举报 androidActionBar 目录(?)[+] 第4 ...
- Android 签名详解
Android 签名详解 AndroidOPhoneAnt设计模式Eclipse 在Android 系统中,所有安装 到 系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程 ...
- Android编译系统详解(一)
++++++++++++++++++++++++++++++++++++++++++ 本文系本站原创,欢迎转载! 转载请注明出处: http://blog.csdn.net/mr_raptor/art ...
- Android布局详解之一:FrameLayout
原创文章,如有转载,请注明出处:http://blog.csdn.net/yihui823/article/details/6702273 FrameLayout是最简单的布局了.所有放在布局里的 ...
随机推荐
- jq实现全选或者全不选
$("#all").click(function () { if($(this).is(":checked")){ $("input[name='pr ...
- ASP.NET中HttpContext.Cache的使用
-------------------------------键 --值-----依赖-----过期时间-------------------------------绝对过期------------- ...
- LSF-SCNN:一种基于 CNN 的短文本表达模型及相似度计算的全新优化模型
欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 本篇文章是我在读期间,对自然语言处理中的文本相似度问题研究取得的一点小成果.如果你对自然语言处理 (natural language proc ...
- postman 时间戳和加密
在使用postman进行接口测试的时候,对于有些接口字段需要时间戳加密,这个时候我们就遇到2个问题,其一是接口中的时间戳如何得到?其二就是对于现在常用的md5加密操作如何在postman中使用代码实现 ...
- put()
put() 作用: 将集合的所有键名和值,存放在一个集合对象中. public Map selectSingleData(String sql,Object...obj) throws SQLExc ...
- Webpack飞行手册
前言 在学习 Webpack 之前,我们需要了解一个概念:模块. 何为模块? 如果你曾学过 Java , C# 之类的语言,一定会知道 Java 中的 import 或 C# 中的 using 吧? ...
- Maven SpringMVC整合Mybatis
关于Spring的核心理念和Mybatis的优点网上已经有很多文档做了说明.这篇博客,只记录springmvc整合mybatis时常见的知识点,以及注意事项,它只有最精简的几个模块,以帮助初学者迅速搭 ...
- 设计模式 - 装饰者模式(Decorator Pattern) 具体解释
装饰者模式(Decorator Pattern) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26707033 装饰者 ...
- Oracle 11gR2 用exp无法导出空表解决方法
Oracle 11gR2 用exp无法导出空表解决方法 在11gR2中有个新特性,当表无数据时,不分配segment以节省空间.Oracle 当然在运行export导出时,空表则无法导出,可是还是有解 ...
- Nginx平台构架
深入理解Nginx模块发开与架构解析读书笔记. nginx在启动后,在unix系统中会以daemon的方式(能够手动关闭 nginx.conf daemon off)在后台执行,后台进程包括一个mas ...