文档章节

Android手势库

水煮鱼摆摆丶
 水煮鱼摆摆丶
发布于 2015/09/22 17:21
字数 634
阅读 99
收藏 0
<?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">

    <LinearLayout
        android:layout_weight="1"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="0dp">
        <ImageView
            android:id="@+id/my_gesture"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="match_parent" />
        <ImageView
            android:id="@+id/old_gesture"<--!找到手势库中的对应手势显示在这个ImageView上-->
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="match_parent" />

    </LinearLayout>

    <android.gesture.GestureOverlayView
        android:background="#191919"
        android:id="@+id/draw_gestrue"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:gestureStrokeType="multiple"
        android:gestureStrokeWidth="5"
        android:gestureColor="#ffb200"
        android:fadeOffset="3000"
        />
</LinearLayout>

下面是一个可以书写的文本区域,调用的是Android中的gestureOverlayView



/**
 * 手势库
 */
public class MainActivity extends AppCompatActivity {

    private ImageView mShowImage,mOldImage;
    private GestureOverlayView mGestureDraw;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);
//        GestureLibraries.fromFile();
        mShowImage = (ImageView) findViewById(R.id.my_gesture);
        mOldImage = (ImageView) findViewById(R.id.old_gesture);
        mGestureDraw = (GestureOverlayView) findViewById(R.id.draw_gestrue);
        mGestureDraw.addOnGesturePerformedListener(
        new GestureOverlayView.OnGesturePerformedListener() {
            @Override
            public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
                GestureLibrary library = GestureLibraries.fromFile(Environment.
                getExternalStorageDirectory().getAbsolutePath() + "/gesture");

                if(library.load()){
                    Log.i("gesture","加载");
                }else{
                    Log.i("gesture","未加载");
                }
                Bitmap bitmap = gesture.toBitmap(200, 200, 10, Color.RED);
                mShowImage.setImageBitmap(bitmap);
                //将我们绘制的手势 与 手势库中 存储的手势进行对比 查询出 最相近的手势
                ArrayList<Prediction> recognize = library.recognize(gesture);
                if(recognize.size()>0){
                    Toast.makeText(MainActivity3.this,
                    "找到手势"+recognize.size(),Toast.LENGTH_SHORT).show();
                    for (Prediction prediction:recognize ) {
                        if( prediction.score>5.0f){//相识度的判断
//                            ArrayList<Gesture> gestures = library.getGestures(prediction.name);
//                            Bitmap bitmap1 = gestures.get(0).toBitmap(200, 200, 10, Color.RED);
//                            mOldImage.setImageBitmap(bitmap1);
                            Toast.makeText(MainActivity.this,
                            "手势相似度"+ prediction.score,Toast.LENGTH_SHORT).show();
                        }
                    }
                }else{
                    Toast.makeText(MainActivity.this,
                    "没找手势"+recognize.size(),Toast.LENGTH_SHORT).show();
                }
                //手势添加到手势类库
                library.addGesture("gesture", gesture);
                //保存手势
                library.save();
            }
        });
    }
}



/**
 * 演示了手势的方法 手势方法的调用时机
 */
public class MainActivity extends AppCompatActivity implements GestureDetector.OnGestureListener{

    private GestureDetector mGesture;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /**
         * 1、创建一个手势
         */
        mGesture = new GestureDetector(this,this);
    }

    /**
     * 2、将我们的Touch事件 传递给我们的手势
     * @param event
     * @return
     */
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return mGesture.onTouchEvent(event);
    }

    /**
     * 摁下
     * @param e
     * @return
     */
    @Override
    public boolean onDown(MotionEvent e) {
        Log.i("gesture","onDown");
        return false;
    }

    /**
     * 按下未移动
     * @param e
     */
    @Override
    public void onShowPress(MotionEvent e) {
        Log.i("gesture","onShowPress");
    }

    /**
     * 轻轻点
     * @param e
     * @return
     */
    @Override
    public boolean onSingleTapUp(MotionEvent e) {
        Log.i("gesture","onSingleTapUp");
        return false;
    }

    /**
     * 滑动
     * @param e1        起点 并且这个起点 不移动
     * @param e2        结束点 这点是变化的
     * @param distanceX     e2 到 上一个e2的X距离
     * @param distanceY     e2 到 上一个e2的Y距离
     * @return
     */
    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
        Log.i("gesture","onScroll e1:X "+e1.getX()+
        " :Y "+e1.getY()+"   e2:X "+e2.getX()+
        " :Y "+e2.getY()+" distanceX:"+distanceX +
         " distanceY:"+distanceY);
        return false;
    }

    /**
     * 长摁
     * @param e
     */
    @Override
    public void onLongPress(MotionEvent e) {
        Log.i("gesture","onLongPress");
    }

    /**
     * 快速滑动
     * @param e1    摁下位置
     * @param e2    结束位置
     * @param velocityX     e1 到 e2 的X速率
     * @param velocityY     e1 到 e2 的Y速率
     * @return
     */
    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        Log.i("gesture","onFling e1:X "+e1.getX()+
        " :Y "+e1.getY()+"   e2:X "+e2.getX()+
        " :Y "+e2.getY()+" velocityX:"+velocityX + 
        " velocityY:"+velocityY);
        return false;
    }
}


© 著作权归作者所有

下一篇: Android定位
水煮鱼摆摆丶
粉丝 3
博文 19
码字总数 8307
作品 0
成都
程序员
私信 提问
Android 手势(Gesture)

一、什么是手势? 所谓手势,其实就是指用户手指或触摸笔在触摸屏上的连续触碰行为,比如在屏幕上葱左至右划出一个动作,就是手势,再比如在屏幕上画一个圆圈也是一个手势,手势这种连续的触...

让代码飞一会
2015/07/13
846
1
android手势密码库的使用

前言 在android开发过程中,偶尔我们会使用到手势密码的问题,那么今天就讲一个手势密码集成的库,经过封装,使用灵活,调用简单。 今天涉及的内容有: 引用库依赖 在xml布局中引用手势密码控...

奔跑的佩恩
04/20
0
0
Android Q Beta 迎来第五版

作者: Dave Burke, 工程部副总裁 Android Q Beta 5 与大家见面啦!我们正式推出 Android Q Beta 的第五个版本,其系统行为已经非常接近最终发布版。面向开发者的 API 已经在此前发布的 Beta...

Android_开发者
07/15
0
0
面向开发者的最佳 Android 库列表

软件库的存在使得Android编码更方便快捷。在如此多 Android库中,我们该如何寻找最合适的一款呢?下面我们做了一个列表供你参考。 动画(Animation) Android View Animations:强大的动画库...

达尔文
2016/11/09
9.1K
16
LibreOffice for Android 开发进展

拜于 Google Summer of Code,现在 LibreOffice for Android 已经有了原型。 Michael Meeks 在博客上分享了他指导的学生 Iain Billet 在 LibreOffice for Android 上的进展,目前 LibreOffic...

oschina
2012/07/16
4.2K
16

没有更多内容

加载失败,请刷新页面

加载更多

python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
7分钟前
0
0
OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
735
10
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
40
0
spring cloud

一、从面试题入手 1.1、什么事微服务 1.2、微服务之间如何独立通讯的 1.3、springCloud和Dubbo有哪些区别 1.通信机制:DUbbo基于RPC远程过程调用;微服务cloud基于http restFUL API 1.4、spr...

榴莲黑芝麻糊
今天
26
0
Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
79
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部