• 用户自定义手势,并识别


    本文介绍了用户如何自定义手势,并在自己的应用中使用自己的手势。

    1、android模拟器上有了gesturebuilder,用户可以通过这个应该自定义一些手势,并且给这个手势取名,这个应该会将手势以文件”gesture“记录在sd卡的目录下,用户将这个文件拷贝到自己的工程资源文件raw文件里。

                          

    然后再布局文件里构建识别手势的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:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.example.gesturedemo.MainActivity$PlaceholderFragment" >
    
        <android.gesture.GestureOverlayView
            android:id="@+id/gesture"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:text="@string/hello_world" />
    
    </RelativeLayout>
    

      最后实现的代码如下:当用户在屏幕上划z的时候程序退出,写对勾时,打印ok,同理还可以定义多笔画的识别:

      

    package com.example.gesturedemo;
    
    import java.util.ArrayList;
    
    import android.support.v7.app.ActionBarActivity;
    import android.support.v7.app.ActionBar;
    import android.support.v4.app.Fragment;
    import android.gesture.Gesture;
    import android.gesture.GestureLibraries;
    import android.gesture.GestureLibrary;
    import android.gesture.GestureOverlayView;
    import android.gesture.GestureOverlayView.OnGestureListener;
    import android.gesture.GestureOverlayView.OnGesturePerformedListener;
    import android.gesture.Prediction;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.ViewGroup;
    import android.os.Build;
    
    public class MainActivity extends ActionBarActivity {
    	GestureOverlayView gesture;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            gesture=(GestureOverlayView) findViewById(R.id.gesture);
            
            //这里设置gesture属性
            gesture.setGestureColor(0xffff00);
            //为gesture空间添加监听器,这是单个笔画的监听器
            gesture.addOnGesturePerformedListener(new MyListener());
            
            //多笔画的监听器
            gesture.addOnGestureListener(new MyLitener2());
            
        }
     class    MyLitener2 implements OnGestureListener
     {
    
    	@Override
    	public void onGestureStarted(GestureOverlayView overlay, MotionEvent event) {
    		//开始的时候执行
    		System.out.println("开始划...");
    	}
    
    	@Override
    	public void onGesture(GestureOverlayView overlay, MotionEvent event) {
    		//当某一个手势被划出的方法
    		System.out.println("画完了一笔");
    	}
    
    	@Override
    	public void onGestureEnded(GestureOverlayView overlay, MotionEvent event) {
    		//所有手势画完调用的方法,一般在这里面处理笔画要执行的动作
    		System.out.println("所有的笔画都画完");
    	}
    
    	@Override
    	public void onGestureCancelled(GestureOverlayView overlay, MotionEvent event) {
    		// 清空画布上的手势时候调用
    		System.out.println("清空手势");
    	}
    	 
     }
        
        
        
    class MyListener implements OnGesturePerformedListener
    {
    
    	@Override
    	public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
    		//创建gesture目录,将raw文件里的手势加载到gesture目录里
    		GestureLibrary geLib=GestureLibraries.fromRawResource(MainActivity.this, R.raw.gestures);
    		//将目录加载到内存
    		geLib.load();
    		//在目录里匹配传进来的手势,并按匹配率排序。
    		 ArrayList<Prediction> predictions =geLib.recognize(gesture);
    		 //获取第一个,匹配率最高的手势
    		 Prediction prediction=predictions.get(0);
    		 //如果手势匹配率达到50%
    		 if(prediction.score>0.5){
    			 //按名字匹配是哪个手势,并相应的操作
    			 if(prediction.name.equals("z"))
    			 {
    				 System.out.println("close!!!!!!!!!!!!!!!!");
    			 MainActivity.this.finish();
    			 }
    			 else if(prediction.name.equals("right"))
    			 {
    				 System.out.println("ok!!!!!!!!!!!!!!!!");
    			 }	 
    		 
    		 }
    	}
    	
    }
    
    }
    

      

  • 相关阅读:
    深入浅出HTTP请求(转自http://www.cnblogs.com/yin-jingyu/archive/2011/08/01/2123548.html)
    IOS定位
    webView(简单的浏览器)
    Get&Post登录
    IOS多媒体
    IOS VFL屏幕自适应
    IOS中在自定义控件(非视图控制器)的视图跳转中 代理方法与代码块的比较
    单例设计的定义
    动画
    多线程
  • 原文地址:https://www.cnblogs.com/bokeofzp/p/4755845.html
Copyright © 2020-2023  润新知