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是最简单的布局了.所有放在布局里的 ...
随机推荐
- 《HelloGitHub》第 20 期
前言 HelloGitHub 项目已经累积到 3k+ Stars.本项能够走到今天,帮助到越来越多的人.少不了热爱开源.不断为本项目贡献项目的小伙伴们. 贡献者列表 很多人都有想法,付诸于行动在少数, ...
- Winform远程更新代码
本软件具备以下形: 1.通过http形式在客户端更新winform代码文件 2.在服务端通过软件生成xml配置文件,客户端通过比对xml配置文件来更新代码文件. 服务端: 在服务器上建立一个IIS发布 ...
- leetcode#42 Trapping rain water的五种解法详解
leetcode#42 Trapping rain water 这道题十分有意思,可以用很多方法做出来,每种方法的思想都值得让人细细体会. 42. Trapping Rain WaterGiven n ...
- js中对节点属性的操作和对节点的操作
常用的节点属性操作方法 1.setAttribute(name,value):给某个节点添加一个属性 2.getAttribute(name):获取某个节点属性的值. 3.removeAttribut ...
- ##5.2 Nova计算节点-- openstack pike
##5.2 Nova计算节点 openstack pike 安装 目录汇总 http://www.cnblogs.com/elvi/p/7613861.html ##5.2 Nova计算节点 # co ...
- mysql的explain
explain 一般用于分析sql. 如下 [SQL] 纯文本查看 复制代码 ? 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 2 ...
- 在网站开发中经常用到的javaScript技术
1>屏蔽功能类 1.1 屏蔽键盘所有键<script language="javascript"><!--function document.onkeyd ...
- Java Random介绍
一.简介 Random类位于java.util包下,此类的实例用于生成伪随机数流.之所以称之为伪随机,是因为真正意义上的随机数(或者称为随机事件)在某次产生过程中是按照实验过程表现的分布概率随机产生的 ...
- Python函数篇(5)-装饰器及实例讲解
1.装饰器的概念 装饰器本质上就是一个函数,主要是为其他的函数添加附加的功能,装饰器的原则有以下两个: 装饰器不能修改被修饰函数的源代码 装饰器不能修改被修改函数的调用方式 装饰器可以简单的理 ...
- labview生成可执行文件
labview生成可执行文件可以分为两种情况. 第一种,是电脑中有labview软件开发环境的情况 第二种,是电脑中没有安装labview软件开发环境 下面是一个简单的labview代码: 程序解释: ...