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是最简单的布局了.所有放在布局里的 ...
随机推荐
- Python之int内部功能介绍
int内部功能的介绍 type(): 1.基本数据类型使用type()函数时,得到相应的数据类型a = 12b = 12.01c = "123"print(type(a)) > ...
- Zabbix 3.0 部署监控 [二]
一.添加监控主机及设置 1.创建主机 Agent可以干一些SNMP无法干的事情,例如自定义监控项 snmp相关文章:http://www.abcdocker.com/abcdocker/1376 ...
- DNS单机部署以及智能dns部署
dns理论 dns的出现 网络出现的早期是使用IP地址通讯的,那时就几台主机通讯.但是随着接入网络主机的增多,这种数字标识的地址非常不便于记忆,UNIX上就出现了建立一个叫做hosts的文件(Linu ...
- Asp.net Core中SignalR Core预览版的一些新特性前瞻,附源码(消息订阅与发送二进制数据)
目录 SignalR系列目录(注意,是ASP.NET的目录.不是Core的) 前言 一晃一个月又过去了,上个月有个比较大的项目要验收上线.所以忙的脚不沾地.现在终于可以忙里偷闲,写一篇关于Signal ...
- 【转】Visual Studio Code 使用Git进行版本控制
原文链接:https://www.cnblogs.com/xuanhun/p/6019038.html?utm_source=tuicool&utm_medium=referral 本来认为此 ...
- 【转】Cmder--Windows下命令行利器
原文链接:https://www.cnblogs.com/zqzjs/archive/2016/12/19/6188605.html cmder cmder是一个增强型命令行工具,不仅可以使用wind ...
- caffe+opencv3.3dnn模块 完成手写数字图片识别
最近由于项目需要用到caffe,学习了下caffe的用法,在使用过程中也是遇到了些问题,通过上网搜索和问老师的方法解决了,在此记录下过程,方便以后查看,也希望能为和我一样的新手们提供帮助. 顺带附上老 ...
- 用Redis轻松实现秒杀系统
秒杀系统的架构设计 秒杀系统,是典型的短时大量突发访问类问题.对这类问题,有三种优化性能的思路: 写入内存而不是写入硬盘 异步处理而不是同步处理 分布式处理 用上这三招,不论秒杀时负载多大,都能轻松应 ...
- svn up出现类似svn: Error converting entry in directory '.' to UTF-8问题解决
执行svn up命令报错如下 # svn up svn: Error converting entry svn: Valid UTF- data (hex:) followed by invalid ...
- IE之页面加载慢.
场景 场景是大屏页面一张深色背景, 里面一些文本元素以及图表展示. 结果在IE下发现加载异常缓慢, 还有部分人员反馈页面卡死. 后台读写优化 默认处理图片逻辑是, ImageIO读取原图, 转成byt ...