您的位置:首页 > 移动开发 > Android开发

Android:自定义手势

2016-09-27 10:55 323 查看

Android:自定义手势

标签(空格分隔): android

编号:000136
作者:陈小默
语言:kotlin
版本:1


Android自定义手势

一手势使用介绍
1 增加手势
11 GestureOverlayView

12 手势库

13 获取用户录入的手势

14 保存手势

2 识别手势
21 加载手势库

22 识别手势

一、手势使用介绍

在某些情况下,我们可能会需要用户自定义手势来完成某些操作,比如我曾经用过的手机里就有这个功能:用户在手机锁屏上绘制某些字母,就能够打开相应的应用。接下来我们将说明自定义手势的一般用法。

1.1 增加手势

1.1.1 GestureOverlayView

很显然,如果我们需要保存一个手势,那么必定先要在View上绘制手势。Android提供了GestureOverlayView这个视图组件,该组件继承自FrameLayout。我们可以向使用普通View一样将其添加到布局文件中。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.gesture.GestureOverlayView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gestureColor="#666"
android:gestureStrokeType="single"
android:gestureStrokeWidth="3">
</android.gesture.GestureOverlayView>
</RelativeLayout>


该View中用到了三个比较重要的属性

gestureColor:画笔的颜色

gestureStrokeType:该手势是一笔完成(single)还是多笔完成(multiple),通常情况下一笔即可

gestureStrokeWidth:画笔的粗细

1.1.2 手势库

Android中使用GestureLibrary代表手势库,其中提供了保存手势和识别手势的方法。GestureLibraries是Android提供的管理手势库的工具了,其中提供了下列几种方法来加载手势库:

public static GestureLibrary fromFile(String path) ;

public static GestureLibrary fromFile(File path) ;

public static GestureLibrary fromPrivateFile(Context context, String name) ;

public static GestureLibrary fromRawResource(Context context, @RawRes int resourceId) ;


这些方法看名字就知道其会从哪些地方加载手势库文件,其加载完成后会返回GestureLibrary对象代表这个手势库文件。

1.1.3 获取用户录入的手势

为了保存用户录入的手势,我们需要给刚才添加的GestureOverlayView设置监听:

(findViewById(gestureOverlayView) as GestureOverlayView).addOnGesturePerformedListener { gestureOverlayView, gesture ->
...
}


1.1.4 保存手势

当我们获取到Gesture对象后,我们就可以使用刚刚创建的GestureLibrary来保存手势了,其中GestureLibrary提供了addGesture()将手势保存到当前手势库对象中,而save()方法会将当前对象中的手势数据存储到本地文件中,如果我们在添加手势后没有调用save()方法进行保存,则下次打开手势库将无法找到上次录入的手势:

gestureLib.addGesture("Gesture_Name", gesture)
gestureLib.save()


于是手势就被保存在了手势库中,并且被命名为”Gesture_Name”

1.2 识别手势

1.2.1 加载手势库

我们已经在1.1.2中介绍了如何加载手势库,但是这里需要补充说明:当我们使用1.1.2中的方法创建手势库对象之后,还需要使用load()方法去将本地数据加载进来:

gestureLib.load()


1.2.2 识别手势

GestureLibrary提供了recognize方法从当前手势库中识别与Gesture匹配的手势,其返回值是
ArrayList<Prediction>
对象,Prediction中只存放了两个属性,一个代表手势名称的name,一个代表匹配分数的score,分数越高表明两个手势越相似。以下示例打印输出了与当前输入手势匹配值大于2的手势的名称:

gestureLib.recognize(gesture).forEach { prediction ->
if(prediction.score > 2.0)
Log.e("TAG","${prediction.name}")
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android
相关文章推荐