乐读文学

Android从入门到精通

乐读文学 > 科普学习 > Android从入门到精通

第79页

书籍名:《Android从入门到精通》    作者:明日科技




protected  void  onCreate(Bundle  savedInstanceState)  {



super.onCreate(savedInstanceState);  //调用父类构造方法



LinearLayout  layout  =  new  LinearLayout(this);  //定义线性布局



layout.setOnTouchListener(this);  //设置触摸事件监听器



layout.setBackgroundResource(R.drawable.background);  //设置背景图片



setContentView(layout);  //使用布局



}



@Override



public  boolean  onTouch(View  v,  MotionEvent  event)  {



Toast.makeText(this,  "发生触摸事件",  Toast.LENGTH_LONG).show();



return  true;



}



}

运行程序后,触摸屏幕,显示如图7.6所示的提示信息。



图7.6 显示触摸事件信息





7.4 手势的创建与识别

教学录像:光盘\TM\lx\7\手势的创建与识别.exe

前面介绍的触摸事件比较简单,下面介绍一下如何在Android中创建和识别手势。目前有很多款手机都支持手写输入,其原理就是根据用户输入的内容,在预先定义的词库中查找最佳的匹配项供用户选择。在Android中,也需要先定义类似的词库。

7.4.1 手势的创建

下面请读者运行自己的模拟器,进入到应用程序界面,如图7.7所示。



图7.7 应用程序界面

在图7.7中,单击Gestures  Builder应用,如图7.8所示。



图7.8 Gestures  Builder程序界面

在图7.8中,单击Add  gesture增加手势,如图7.9所示。在Name栏中输入该手势所代表的字符,在Name栏下方画出对应的手势。单击Done按钮完成手势的增加。



图7.9 增加手势界面

类似的,继续增加数字1、2、3所对应的手势,如图7.10所示。



图7.10 显示当前已经存在的手势

7.4.2 手势的导出

在创建完手势后,需要将保存手势的文件导出,以便在自己开发的应用程序中使用。打开Eclipse并切换到DDMS视图。在File  Explorer中找到\mnt\sdcard\gestures文件,如图7.11所示。将该文件导出,使用默认名称。



图7.11 导出保存手势的文件

7.4.3 手势的识别

例7.5   在Eclipse中创建Android项目,名称为7.5,实现识别用户输入手势的功能。(实例位置:光盘\TM\sl\7\7.5)

(1)在res文件夹中创建子文件夹,名称为raw。将前面导出的手势文件复制到该文件夹中。

(2)修改layout文件夹中的main.xml文件,添加一个GuestOverlayView控件来接收用户的手势。修改完成后,main.xml文件代码如下:








android:layout_width="fill_parent"



android:layout_height="fill_parent"



android:background="@drawable/background"



android:orientation="vertical"  >






android:layout_width="fill_parent"



android:layout_height="wrap_content"



android:gravity="center_horizontal"



android:text="@string/title"



android:textColor="@android:color/black"



android:textSize="20dp"  />






android:id="@+id/gestures"



android:layout_width="fill_parent"



android:layout_height="0dip"



android:layout_weight="1.0"  />





(3)创建GesturesRecognitionActivity类,它继承了Activity类并实现了OnGesturePerformedListener接口。在onCreate()方法中,加载raw文件夹中的手势文件,接着获得布局文件中定义的GestureOverlayView控件。在onGesturePerformed()方法的实现中,获得得分最高的预测结果并提示,该类代码如下:

public  class  GesturesRecognitionActivity  extends  Activity  implements  OnGesturePerformedListener  {



private  GestureLibrary  library;



@Override



public  void  onCreate(Bundle  savedInstanceState)  {



super.onCreate(savedInstanceState);



setContentView(R.layout.main);



library  =  GestureLibraries.fromRawResource(this,  R.raw.gestures);  //加载手势文件



if  (!library.load())  {  //如果加载失败则退出



finish();



}



GestureOverlayView  gesture  =  (GestureOverlayView)  findViewById(R.id.gestures);



gesture.addOnGesturePerformedListener(this);  //增加事件监听器



}



@Override



public  void  onGesturePerformed(GestureOverlayView  overlay,  Gesture  gesture)  {



ArrayList  gestures  =  library.recognize(gesture);  //获得全部预测结果



int  index  =  0;  //保存当前预测的索引号



double  score  =  0.0;  //保存当前预测的得分