手势识别,是通过在具有触摸屏的手机上划出不同的手势来实现人机交互。比起以前的单一使用按键来操控,手势识别的方式能让用户获得更好的操作体验。android sdk中已经创建了一个gesture builder的方法(该方法能实现手势的添加,今天说到的程序就是在此基础上改进而来),这样就使得基于创建手势的gesture开发变得方便。

进入程序后的初始页面

添加一个手势之后的情况 :

gesture_list.xml中定义两个button

<LinearLayout
        style=“@android:style/ButtonBar”//定义buttonbar的组件类型
        android:layout_width=“match_parent”//宽度与父类一致
        android:layout_height=“wrap_content”//高度能包住内容即可
        android:orientation=“horizontal”>//走向为水平
        <Button
            android:id=“@+id/addButton“//新建addbutton的id,方便调用
            android:onClick="addGesture"
            android:layout_width=“0dip“//dip是一种单位,是怎么样的长度不是很清楚
            android:layout_height="wrap_content"
            android:layout_weight="1"
  </LinearLayout>
            android:enabled="false"
                     android:text=“@string/button_add” />//Button上书写的内容
         <Button
            android:id="@+id/reloadButton"
            android:onClick="reloadGestures"
            android:layout_width="0dip"         
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:enabled="false"           

android:text="@string/button_reload" />

gesture_list.xml中创建list的页面布局
<ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="1.0" />

<TextView
        android:id="@android:id/empty"
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="1.0"
        android:gravity=“center“       //本元素所有子元素的重力方向
        android:text="@string/gestures_loading"

android:textAppearance=“?android:attr/textAppearanceMedium” /> //appearance为属性中定义的textAppearanceMedium

GestureBuilderActivity中使用配适器将手势的内容与对应显示在list中
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);//重写父类内容
        setContentView(R.layout.gestures_list);//将gesture_list.xml对应的布局载入
        mAdapter = new GesturesAdapter(this);//新建配适器对象
        setListAdapter(mAdapter);//将配适器中所封装的内容用list形式表示出来

adapter的作用就是将要在列表内显示的数据和列表本身结合起来。列表本身只完成显示的作用,其实他就是继承自VIEWGROUP 类。但是他又有一个独特的函数就是setAdapter()就是完成了view和adapter的结合。adapter如同其本身含义,其实就是一个适配器,他可以对要显示的数据进行统一的封装,主要是将数据变成view提供给list。

GestureBuilderActivity中通过intent实现到另外两个activity的跳转
public void reloadGestures(View v) {
        Intent intent = new Intent(this,        GestureShowActivity.class);
        startActivity(intent);
    }
    
public void addGesture(View v) {
        Intent intent = new Intent(this,     CreateGestureActivity.class);
        startActivityForResult(intent, REQUEST_NEW_GESTURE);
    }

注:后面关于页面之间的跳转都将用到intent

App_select.xml中的布局

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:orientation="horizontal">
  <ImageView android:id=“@+id/appicon”  //显示应用程序的图标
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content"  
         android:layout_margin=“5px”/> //px是像素的意思         
         <LinearLayout android:orientation="vertical" 
           android:layout_width="wrap_content"  
           android:layout_height="wrap_content">  
           <TextView android:id="@+id/appname"  
               android:layout_width="wrap_content" 
               android:layout_height="wrap_content"  
               android:textColor="#FFFFFFFF" 
               android:textSize="22px" />  
           <TextView android:id="@+id/pname"  
               android:layout_width="wrap_content" 
               android:layout_height="wrap_content"  
               android:textColor="#FFFFFFFF" 
               android:textSize="13px" />      
       </LinearLayout>

</LinearLayout>

ApplicationSelecte中获取手机中已安装的程序并点选之后取得程序的基本信息

private ArrayList<PInfo> getInstalledApps(boolean getSysPackages) {

ArrayList<PInfo> res = new ArrayList<PInfo>();             
        List<PackageInfo> packs = getPackageManager().getInstalledPackages();     
        for(int i=0;i<packs.size();i++) {     
            PackageInfo p = packs.get(i);     
            if ((!getSysPackages) && (p.versionName == null)) {     
                continue ;     //使用arraylist方式通过getPackageManager().getInstalledPackages()来获得已经安装的程序
            }     
            PInfo newInfo = new PInfo();     
            newInfo.appname = p.applicationInfo.loadLabel(getPackageManager()).toString();     
            newInfo.pname = p.packageName; 
            newInfo.appicon = p.applicationInfo.loadIcon(getPackageManager());
            res.add(newInfo);   //  获得程序名,包名,应用程序的图标 
        }     
        return res;      
    }  
CreateGestureActivity中通过监听器来获取手势

GestureOverlayView overlay = (GestureOverlayView) findViewById(R.id.gestures_overlay);   //GestureOverlayView能在所在界面的最外层划出手势
        overlay.addOnGestureListener(new GesturesProcessor());//设置监听器,能够记录划出手势的点和经过的路径,并保存

GestureShowActivity中识别手势并打开应用程序

public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {  
        ArrayList predictions = mLibrary.recognize(gesture);          //  使用了recognize的方法
  
        // We want at least one prediction  
        if (predictions.size() > 0) {                    //必须得有划动
            Prediction prediction = (Prediction) predictions.get(0);  
            // We want at least some confidence in the result  
            if (prediction.score > 1.0) {                //有一定的相似程度
                // Open the application  
                String packageName = prediction.name;
                try{
                Intent mIntent = getPackageManager() .getLaunchIntentForPackage(packageName) ;
                startActivity(mIntent);                   // 通过getPackageManagerd中getLaunchIntentForPacksge的方法打开相对应的应用程序
                }
                catch(Exception e){
                Toast.makeText (this,"查无此程序",Toast.LENGTH_SHORT).show();
                }          //不存在的话抛出异常

}

注:本文参加

“第二届 Google 暑期大学生博客分享大赛 - 2011 Android 成长篇 ”

转载于:https://www.cnblogs.com/justforfun/archive/2011/08/12/2135647.html

Android 手势小试牛刀相关推荐

  1. Android手势锁实现

    最终效果如下 整体思路 a.自定义了一个RelativeLayout(GestureLockViewGroup)在里面会根据传入的每行的个数,生成多个GestureLockView(就是上面一个个小圈 ...

  2. Android 系统(74)---Android手势触摸事件的分发和消费机制

    Android手势&触摸事件的分发和消费机制 在Android 客户端开发过程中,经常会遇到手势事件的处理,本篇博文讲一下本人对touch事件处理机制的一些理解,希望对一些初级开发者有所帮助. ...

  3. Android 手势检测实战 打造支持缩放平移的图片预览效果(下)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/39480503,本文出自:[张鸿洋的博客] 上一篇已经带大家实现了自由的放大缩小图 ...

  4. android手势_Android手势检测器

    android手势 In this tutorial, we'll be discussing and implementing Gestures in our Android Application ...

  5. android手势_您可能不知道的七个Android手势

    android手势 Gestures make using your phone faster and more efficient-but only if you know the gestures ...

  6. Android手势密码探索

    Android 智能手机在全球市场有着极高的市场占有率,越来越受到广大消费者的青睐.但 Android 作为开源操作系统,且很容易可以获得系统 root 权限,Android 系统的安全问题也是用户和 ...

  7. android手势密码源码,Android自定义UI手势密码改进版源码下载

    在之前文章的铺垫下,再为大家分享一篇:Android手势密码,附源码下载,不要错过. 先看第一张图片的布局文件 activity_main.xml xmlns:tools="http://s ...

  8. Android手势密码view笔记(一)

    前言:不知不觉已经在这座陌生又熟悉的城市呆了一年多了,说不出什么感觉,可是即使是自己感觉自己没什么变化,但是周围的事物却不断的在变,不知道自己选择的路未来如何,但是当下我还是会努力.努力.再努力的,加 ...

  9. android 手势放缩_Android应用中实现手势控制图片缩放的完全攻略

    一.概述现在app中,图片预览功能肯定是少不了的,用户基本已经形成条件反射,看到小图,点击看大图,看到大图两个手指开始进行放大,放大后,开始移动到指定部位~~~ 我相信看图的整个步骤,大家或者说用户应 ...

最新文章

  1. git ssh创建分支_Git(2):在gitlab中创建开发用户,以及master分支的安全管理
  2. 桌面虚拟化之呼叫中心语音应用
  3. 智能车竞赛技术报告 | 智能车视觉 - 中国计量大学 - 赛博-10
  4. SOA也是一种设计模式
  5. 【渝粤教育】国家开放大学2018年春季 0269-21T文学概论 参考试题
  6. Apache SolrCloud安装
  7. Android事件总线(四)源码解析otto
  8. HDFS 上传文件的不平衡,Balancer问题是过慢
  9. 聊聊浏览器(webkit)资源加载机制
  10. 拓端tecdat|R语言公交地铁路线进出站数据挖掘网络图可视化
  11. java cp classpath_java -cp、java -jar、java -classpath
  12. Eclipse 2021-09最新版安装图文教程(详细包会)
  13. FMS直播,在PC和手机PAD同时接收直播(使用RTMP和HLS协议)
  14. Nagios下载安装配置
  15. python多线程模块threading学习笔记(5)之锁Lock
  16. 漫画人物头像总是画不好?快看看这些注意点你有没有中招!
  17. BUUCTF:[INSHack2018]Self Congratulation
  18. matlab能画五维吗,进化算法之粒子群算法和Matlab实现(多维)
  19. idea软件调整字体大小和行间距
  20. 魅族手机便签的备忘录内容误删了怎么办?

热门文章

  1. 麦当劳一“发币”,币圈就闹笑话,加密数字货币到底是什么?
  2. eclipse工具的使用
  3. 2022.1.12C语言小练
  4. 为什么心跳包(HeartBeat)是必须的?
  5. Set集合及源码分析
  6. 经典代码-request请求获取参数(post和get两种方式)
  7. js中的class解构
  8. matlab duffing相图,典型二阶非线性Duffing方程的MATLAB仿真.doc
  9. 《牧羊少年奇幻之旅》的优秀读后感分享3300字
  10. 密码包含-数字、大小写、特殊字符-正则表达式