一种用于手势输入的透明覆盖层,可以覆盖在其他空间的上方,也可包含在其他控件 android.gesture.GestureOverlayView

获得手势文件

需要用GesturesBuilder,如果没有就安装这个app

安装

其实这是一个Sample的,用eclipse和android studio中各有不同方法导入,在版本android2.33中有

取得文件

在GesturesBuilder画对应的手势和命名之后,可以在文件夹mmt中的sdcard中有个gestures文件,把这个文件保存起来,导入到你的项目的res文件夹中

监听器

有三种监听器

  1. OnGestureListener 手势监听器
  2. OnGesturePerformedListener 手势执行监听器(一般用这个)
  3. OnGesturingListener执行中的监听器

例子

实现在一张图片上各种自定义手势的效果

1.布局

可以在面板中的Advanced有GestureOverlayView,或者直接在AndroidMainFest.XML编写

<android.gesture.GestureOverlayView
android:id="@+id/gestureOverlayView"
android:layout_width="180dp"
android:layout_height="180dp" >
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/ic_launcher"/
</android.gesture.GestureOverlayView>

2.找到并加载刚刚导出来的手势资源

运行GesturesBuilder,添加你喜欢的手势

然后在文件夹mmt中的sdcard中有个gestures文件,用这个按钮保存到本地

添加到你的项目res文件夹下

3.给gestureOverlayView设置监听器

public class MainActivity extends Activity {
GestureOverlayView gestureOverlayView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gestureOverlayView = (GestureOverlayView) findViewById(R.id.gestureOverlayView);
//1.找到预先设定好的手势文件并加载进来
//这里的变量用final修饰是是由于局部变量的生命周期
final GestureLibrary library =GestureLibraries.fromRawResource(MainActivity.this, R.raw.gestures);
library.load();
//给gestureOverlayView添加监听器
gestureOverlayView.addOnGesturePerformedListener(new OnGesturePerformedListener() { @Override
public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
// TODO Auto-generated method stub
//识别手势,返回值是一个手势的集合
ArrayList<Prediction> mygesture = library.recognize(gesture);
Prediction prediction = mygesture.get(0);
/*这里的score是指相似度,就是有点类似在这个误差范围内都认为是这个手势
*至于这个的数值需要自己调试,找一个合适的值,值越大,就越要接近原来的
* name就是你的手势的名字
*/
if (prediction.score >= 5.0 ) {
if (prediction.name.equals("exit")) {
finish();
}else if(prediction.name.equals("next")){
Toast.makeText(MainActivity.this, "下一个", Toast.LENGTH_LONG).show();
}else if (prediction.name.equals("previous")) {
Toast.makeText(MainActivity.this, "前一个", Toast.LENGTH_LONG).show();
}
}else {
Toast.makeText(MainActivity.this, "没有这个手势", Toast.LENGTH_LONG).show();
}
}
});
}
}

效果

 

最新文章

  1. Python基础二
  2. 【目录】Newlife XCode组件相关文章目录
  3. jvisualvm远程监控jvm设置
  4. Effective Java 阅读笔记——枚举和注解
  5. 异步加载DOM造成的高度问题造成iScroll不能滚动
  6. windows 下 scrapy的安装
  7. sed 简明教程
  8. C语言陷阱——类型转换
  9. 【转】Java 内部类种类及使用解析
  10. canvas,html2canvas等合成图片不清晰问题
  11. clickhouse的使用和技巧,仅个人
  12. ansible-mysql
  13. Linux学习之路(二)
  14. Beta 冲刺(4/7)
  15. API响应
  16. hbuilder中的wap2app (将M站快速转换成App的开发框架)使用过程有关原生标题的关闭
  17. 分布式事务 spring 两阶段提交 tcc
  18. python---tornado初识(1)
  19. LeetCode(26): 删除排序数组中的重复项
  20. 【LeetCode】238. Product of Array Except Self

热门文章

  1. Stanford Parser学习入门(1)-Eclipse中配置
  2. Reactor Cooling
  3. java.sql.SQLException: Can not issue executeUpdate() for SELECTs
  4. .net 开源项目
  5. CXF Service Interceptor请求,响应报文之控制台输出
  6. java---金额中文大小写实时转换小程序
  7. Ural 1332 把圆细分+圆内切,内含关系判定
  8. Oracle索引(B*tree与Bitmap)的学习总结
  9. mysql inner join,full outer join,left join,right jion
  10. thymeleaf 和其它标签组合 获取数据