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

Android自定义手势识别

2015-11-18 17:17 465 查看

自定义手势

要想实现自定义手势的识别,前提当然是我们要自定义手势了。在模拟器中我们可以找到这么一个程序GesturesBuilder。如图:

如果模拟器中没有,我们也可以这样找到:



这样就导入了一个Android的实例工程,在模拟器上安装即可。

用这个APP保存自己自定义的手势。(用法很简单,读者自行研究)

手势资源

这是我自定义的手势:



然后找到模拟器上存放这三个手势的文件。这是我模拟器上存放的目录



将gestures文件放入资源文件夹下的raw文件夹下。

手势识别

直接上代码,不懂的看注释

布局:

android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<android.gesture.GestureOverlayView
android:id="@+id/view"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ImageView
android:id="@+id/iv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/ic_launcher"
/>
</android.gesture.GestureOverlayView>
</LinearLayout>


// view为GestureOverlayView 是加载手势的图层
view = (GestureOverlayView) findViewById(R.id.view);
// 加载手势库
library = GestureLibraries.fromRawResource(this, R.raw.gestures);
// 加载手势库,应该判断返回值,判断加载是否成功
library.load();
// 加载监听
view.addOnGesturePerformedListener(new OnGesturePerformedListener()
{
@Override
public void onGesturePerformed(GestureOverlayView overlayView,
Gesture gesture)
{
// gesture为用户在GestureOverlayView图层上的手势
// 将gesture与手势库中的手势比较 返回一个list对象存放的是一组Prediction对象
// Prediction有2个字段 name(对应自定义手势的名字)score(相似度)
// ArrayList<Prediction>是按照相似度从高到低排列的,所以我们不用遍历这个数组,只取第一个就OK
ArrayList<Prediction> predections = library.recognize(gesture);
Prediction predection = predections.get(0);
// 判断最相似的Prediction相似度是否达到标准
// 最好不要太高,以防识别不到
if (predection.score >= 5.0)
{
String msg = "";
// 这个手势被识别了,然后我们判断一下这是手势库中的那个手势
if (predection.name.equals("next"))
{
msg = "下一首";
} else if (predection.name.equals("previous"))
{
msg = "上一首";
} else if (predection.name.equals("refresh"))
{
msg = "刷新";
}
if (!msg.isEmpty())
{
Toast.makeText(MainActivity.this, msg,
Toast.LENGTH_SHORT).show();
}
}
}
});


这里ArrayList是一个相似度从高到低的数组,只要加载的手势库不为空,predictions.get(0)就不会为空,不过在加载手势库的时候应该判断一下是否加载成功。

上一篇,简单手势识别
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息