Android GestureOverlayView

分享到:

GestureOverlayView控件用来实现自定义的手势操作,用户可以在上面绘制手势的滑动路径,可以把GestureOverlayView理解成一块画板,各种手势操作就是手指在画板上留下的轨迹。

下面通过实例了解GestureOverlayView
这个例子实现用户自定义手势的逻辑,并通过Toast给出绘制手势的3种状态,包括:正在绘制手势,结束正在绘制手势,手势绘制完成
本例包括3个文件,分别是:主界面UI布局,定义颜色的colors.xml,Activity源码,在Android4.0.3平台运行通过
效果如下图所示:

主界面XML代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:orientation="vertical" >

         <android.gesture.GestureOverlayView 
          android:id="@+id/gesture"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent" /> 

</LinearLayout>

颜色配置文件colors.xml 如下:(此文件放在/res/values/目录下)

<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ungestureColor">#ffff0000</color>
<color name="gestureColor">#ff0000ff</color>
</resources>

Activity文件如下:

package com.stevenhu.hu.dgt;
import android.app.Activity;
import android.gesture.Gesture;
import android.gesture.GestureOverlayView;
import android.gesture.GestureOverlayView.OnGesturePerformedListener;
import android.gesture.GestureOverlayView.OnGesturingListener;
import android.os.Bundle;
import android.widget.Toast;

public class DrawGestureTest extends Activity implements OnGesturePerformedListener, OnGesturingListener
          {
          
          private GestureOverlayView mDrawGestureView;
          /** Called when the activity is first created. */
          @Override
          public void onCreate(Bundle savedInstanceState)
          {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.main);
  
          mDrawGestureView = (GestureOverlayView)findViewById(R.id.gesture);
  
          //设置手势可多笔画绘制,默认情况为单笔画绘制
          mDrawGestureView.setGestureStrokeType(GestureOverlayView.GESTURE_STROKE_TYPE_MULTIPLE);
          //设置手势的颜色(蓝色)
          mDrawGestureView.setGestureColor(gestureColor(R.color.gestureColor));
          //设置还没未能形成手势绘制是的颜色(红色)
          mDrawGestureView.setUncertainGestureColor(gestureColor(R.color.ungestureColor));
          //设置手势的粗细
          mDrawGestureView.setGestureStrokeWidth(4);
          /*手势绘制完成后淡出屏幕的时间间隔,即绘制完手指离开屏幕后相隔多长时间手势从屏幕上消失;
          * 可以理解为手势绘制完成手指离开屏幕后到调用onGesturePerformed的时间间隔
          * 默认值为420毫秒,这里设置为2秒
          */
          mDrawGestureView.setFadeOffset(2000);
  
          //绑定监听器
          mDrawGestureView.addOnGesturePerformedListener(this);
          mDrawGestureView.addOnGesturingListener(this);
          }
  
          //手势绘制完成时调用
          @Override
          public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) 
          {
          // TODO Auto-generated method stub
          showMessage("手势绘制完成");
          }
  
          private int gestureColor(int resId)
          {
          return getResources().getColor(resId);
          }
  
          private void showMessage(String s)
          {
          Toast.makeText(this, s, Toast.LENGTH_SHORT).show();
          }
         //结束正在绘制手势时调用(手势绘制完成时一般是先调用它在调用onGesturePerformed)
          @Override
          public void onGesturingEnded(GestureOverlayView overlay) 
          {
          // TODO Auto-generated method stub
          showMessage("结束正在绘制手势");
          }
         //正在绘制手势时调用
          @Override
          public void onGesturingStarted(GestureOverlayView overlay) 
          {
          // TODO Auto-generated method stub
          showMessage("正在绘制手势");
          }
         @Override
          protected void onDestroy() 
          {
          // TODO Auto-generated method stub
          super.onDestroy();
          //移除绑定的监听器
          mDrawGestureView.removeOnGesturePerformedListener(this);
          mDrawGestureView.removeOnGesturingListener(this);
          }
  
}

本例只是通过DrawGestureView控件模拟了自定义手势的逻辑,如果想把手势数据保存起来就需要Android系统提供的手势库功能。具体实现可参考Android SDK提供的demo,大概位置在android-sdk-windows\samples\android-10\GestureBuilder不同版本的sdk位置稍有不同
关于创建手势库,可以参考csdn上的一篇入门文章:http://blog.csdn.net/like7xiaoben/article/details/7173420

昵    称:
验证码:

相关文档:

Android控件
Android基础知识
Android组件
Android实例