Android中添加和识别手势操作

实现思路:将手势写入GestureLibrary中,对其他手势进行匹配对比,进行识别

  • 先在布局中加入GestureOverlayView组件
 <android.gesture.GestureOverlayView
        android:id="@+id/add_gesture"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gestureStrokeType="multiple"
        />

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="#AFAFAF"
        />

    <android.gesture.GestureOverlayView
        android:id="@+id/recognize_gesture"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gestureStrokeType="multiple"
        />
android:gestureStrokeType=""
    multiple:手势需要多笔完成
    single:手势一笔完成
  • 代码:
package top.helloworlds.gesture;

import android.content.DialogInterface;
import android.gesture.Gesture;
import android.gesture.GestureLibraries;
import android.gesture.GestureLibrary;
import android.gesture.GestureOverlayView;
import android.gesture.Prediction;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    GestureOverlayView addGesture;
    GestureOverlayView recognizeGesture;
    GestureLibrary library;

    //设置手势库存储的路径
    final String LIBRARY_PATH = "/mnt/sdacrd/Gesture";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        //添加手势
        addNewGesture();
        //识别手势
        recognizeTheGesture();
    }

    private void recognizeTheGesture() {
        //读取手势库
        library = GestureLibraries.fromFile(LIBRARY_PATH);
        if (library.load()) {
            Toast.makeText(MainActivity.this, "装载成功", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(MainActivity.this, "装载失败", Toast.LENGTH_SHORT).show();
        }

        //获取手势编辑组件
        recognizeGesture = (GestureOverlayView) findViewById(R.id.recognize_gesture);
        //为组件添加监听器
        recognizeGesture.addOnGesturePerformedListener(new GestureOverlayView.OnGesturePerformedListener() {
            @Override
            public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
                //识别绘制的手势库
                ArrayList<Prediction> predictions = library.recognize(gesture);
                ArrayList<String> result = new ArrayList<String>();
                //遍历所有找到的Prediction对象
                for (Prediction pred : predictions) {
                    //当相识度大于2.0时输出
                    if (pred.score > 2.0) {
                        result.add("与"+pred.name+"相似的为"+pred.score);
                    }
                }

                if (result.size() > 0) {
                    //使用一个带List的对话框来显示所有匹配的手势
                    ArrayAdapter<Object> adapter = new ArrayAdapter<Object>(MainActivity.this,
                            android.R.layout.simple_dropdown_item_1line,
                            result.toArray());
                    //显示在对话框内
                    new AlertDialog.Builder(MainActivity.this)
                            .setAdapter(adapter, null)
                            .setPositiveButton("确定", null).show();
                } else {
                    Toast.makeText(MainActivity.this, "未找到匹配的手势", Toast.LENGTH_SHORT).show();
                }
            }
        });

    }

    private void addNewGesture() {

        //获取手势编辑视图
        addGesture = (GestureOverlayView) findViewById(R.id.add_gesture);
        //设置手势绘制的颜色
        addGesture.setGestureColor(Color.RED);
        //设置手势的绘制宽度
        addGesture.setGestureStrokeWidth(4);
        //添加监听事件
        addGesture.addOnGesturePerformedListener(new GestureOverlayView.OnGesturePerformedListener() {
            @Override
            public void onGesturePerformed(GestureOverlayView overlay, final Gesture gesture) {
                //加载布局文件所代表的视图
                View saveDialog = getLayoutInflater().inflate(R.layout.dialog, null);
                ImageView imageView = (ImageView) saveDialog.findViewById(R.id.imageView);
                final EditText editText = (EditText) saveDialog.findViewById(R.id.editText);

                //根据Gesture包含的手势创建位图
                Bitmap bitmap = gesture.toBitmap(128, 128, 10, Color.RED);
                imageView.setImageBitmap(bitmap);

                //使用对话框显示布局文件
                new AlertDialog.Builder(MainActivity.this)
                        .setView(saveDialog)
                        .setPositiveButton("保存", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                //获取指定文件对应的手势库
                                GestureLibrary gestureLibrary = GestureLibraries.fromFile(LIBRARY_PATH);
                                //添加手势
                                gestureLibrary.addGesture(editText.getText().toString(), gesture);
                                //保存手势库
                                gestureLibrary.save();
                            }
                        })
                        .setNegativeButton("取消", null)
                        .show();
            }
        });

    }

}
时间: 2024-10-05 16:35:27

Android中添加和识别手势操作的相关文章

Android中添加思源字体/NotoSansCJK/SourceHanSans

系统版本:Android 4.2.2_r1 本文主要是在Android中添加思源字体的过程记录.思源字体是Google和Adobe在2014.07.18发布的中文字体. 1.获取思源字体(Google:Noto Sans CJK; Adobe:Source Han Sans). 2.解压后如下几个才是思源字体. NotoSansHans-Regular.otf    常规 NotoSansHans-Black.otf      黑体 NotoSansHans-DemiLight.otf Noto

android中添加背景音乐

方法一:这是使用java中的多线程,另外new出一个类,用类来启动音乐. 这个方法,就像当初写java的小游戏一样,不过是在电脑上运行的,可以控制每一个动作,比如你的触碰动作,但是,在我这个游戏中,我需要的不是一点的音乐,虽               然后期会用到,而是一开始就有的. 不过,用这个方法,没用service,就是开起来的时候,会很卡,而且会闪退. 1 package com.example.flybird_anla; 2 3 4 import java.util.HashMap;

在Android中使用自带API操作Json

Json简介 JavaScript对象表示法(JavaScript Object Notation) 是存储和交换文本信息的语法 特点 是轻量级的文本数据交换格式 独立于语言和平台 具有自我描述性,更易理解 Json与XML 类似XML,比XML更小.更快.更易解析 没有结束标签 更短 读写的速度更快 使用数组 不使用保留字 Json语法 是JavaScript对象表示法语法的子集 数组在键值对中 数据由逗号分隔 大括号保存对象 中括号保存数组 Json值可以是 数字(整数或浮点数) 字符串(在

Android中的指纹识别

转载请注明出处:http://blog.csdn.net/wl9739/article/details/52444671 最近项目需要使用到指纹识别的功能,查阅了相关资料后,整理成此文. 指纹识别是在Android 6.0之后新增的功能,因此在使用的时候需要先判断用户手机的系统版本是否支持指纹识别.另外,实际开发场景中,使用指纹的主要场景有两种: 纯本地使用.即用户在本地完成指纹识别后,不需要将指纹的相关信息给后台. 与后台交互.用户在本地完成指纹识别后,需要将指纹相关的信息传给后台. 由于使用

android中sql关于时间的操作

sql 中有时间的类型,date,time,datetime,方便关于记录的维护,下面一个demo演示怎么在每条记录中默认增加时间 源码下载地址 http://www.codes51.com/code/detail_1460.html 1.先是databasehelper类,这里建表保存一本书,包括书名,作者. package com.chaoyue.sqldemo; import android.content.ContentValues; import android.content.Con

java1.7与Android中的文件I/O操作(草稿)

说明:文件I/O的关键类比较多,这里总结一下. 参考:<Java 7 入门经典> 1.Java输入流 图1,java常用输入输出流的结构图(第一版) 1)标准流 标准流 类型 方法 System.in InputStream System.out PrintStream 例如:printf("b=%2$-15.2f",a,b) System.err 2)字节型 典型方式-1:从文件中读取 File file = ... InputStream in = null; try

Android中添加水平线和垂直线

1.添加水平线 <View android:layout_height="0.5dip" android:background="#686868" android:layout_width="match_parent"/> 2.添加垂直线 <View android:layout_height="match_parent" android:background="#686868" andr

Android中添加竖线和横线的方法

竖线 <View       android:layout_width="1dip"     android:layout_height="match_parent"     /> 横线 <View  android:layout_height="1px"            android:layout_width="match_parent" />

[工作积累] android 中添加libssl和libcurl

1. libssl https://github.com/guardianproject/openssl-android 然后执行ndk-build 2.libcurl 源代码组织结构, 下面的makefile要依赖这个结构. 因为curl依赖openssl, 所以需要先编译openssl: src/openssl-android src/curl-android 下载curl的代码, 并放入src/curl-android/jni 下. 本来想用cygwin来运行configure, 生成an