SlideShare a Scribd company logo
1 of 17
Download to read offline
Motion and Gesture
      in Android
Roger
yixx@ucweb.com
roger2yi@gmail.com
www.twitter.com/roger2yi
https://plus.google.com/
Motion Event

• 系统通过MotionEvent传递触屏事件给应用
    – View.onTrackballEvent(MotionEvent)
    – View.onTouchEvent(MotionEvent)

• MotionEvent
    – action code
    – axis values (x, y)

2011-10-20                 Roger, UC
Action Code
• Action Code指定了状态的变化
    – ACTION_DOWN

    – ACTION_UP

    – ACTION_MOVE

    – ACTION_CANCEL

    – ACTION_POINTER_DOWN

    – ACTION_PONTER_UP
2011-10-20                      3
Cont.

• 对于ACTION_POINTER_DOWN和
  ACTION_PONTER_UP,Action Code中还
  包含了该Pointer的Index数据



    final int pointerIndex =
      (ev.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK)
      >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;



2011-10-20                    Roger, UC
Multi-touch
               Multi-touch

• Android 2.2 (SDK-8) 加入了多点触摸的支持
    – MotionEvent可以包含一个或多个Pointer的数据
    – 每个Pointer在整个Motion(Down -> Move -> Up)
      的过程中会分配一个Id,作为这个Pointer的唯一标记
    – 可以通过Pointer的Index获得Id或者相反
    – getX,getY可以通过传入的Index参数获得多个
      Pointer的位置



2011-10-20          Roger, UC
Gesture Detector
• Android 2.2 SDK提供了简单手势识别器用
  于识别若干常用的手势
    –   Long Pressed
    –   Fling (Flick)
    –   Double Tap
    –   Scale (Pinch)
• 应用可以提供自己的手势识别器支持更多
  的手势识别,比如Two Fingers Tap, Three
  Fingers Tap...
2011-10-20              Roger, UC
private class ScaleListener extends
       ScaleGestureDetector.SimpleOnScaleGestureListener {

    @Override
    public boolean onScale(ScaleGestureDetector detector) {
      mScaleFactor *= detector.getScaleFactor();

          // Don't let the object get too small or too large.
          mScaleFactor = Math.max(0.1f, Math.min(mScaleFactor, 5.0f));

          invalidate();
          return true;
    }
}

... ...

public boolean onTouchEvent(MotionEvent ev) {

    // Let the ScaleGestureDetector inspect all events.
    mScaleDetector.onTouchEvent(ev);
2011-10-20                             Roger, UC
应用自定义手势的支持
             应用自定义 手势的
               自定义手势
• Android提供了对自定义手势的比较完整的
  支持(1.6+),包括
    – 生成手势的轨迹数据(支持不连续的笔画输
      入,但不支持多点),并保存到外部文件
    – 拦截用户的触屏输入,跟加载的手势数据(包
      含多个手势)做匹配
    – 返回给应用可能匹配的手势
• 类似海豚浏览器的手势输入的功能,完全
  依赖于SDK提供的支持就可以实现
2011-10-20       Roger, UC
Gesture Builder
• 模拟器自带一个Gesture
  Builder用于生成手势数据(源
  码在SDK Samples里面)

• 应用可以使用它来预先生成内
  置手势

• 应用也可以让用户生成新的手
  势

• 最后生成的手势数据可以通过
  GestureLibrary保存到外部文件
  中



2011-10-20           Roger, UC
Gesture Library




2011-10-20        Roger, UC
Cont.

• 创建手势的过程
    – 显示一个GestureOverlayView,等待用户输入
      手势
    – 当手势输入完毕后从GestureOverlayView获得
      Gesture对象
    – 创建一个GestureLibrary(可以先加载旧的手
      势数据)
    – 将新的Gesture对象加入该Library并保存

2011-10-20       Roger, UC
2011-10-20   Roger, UC
手势识别
              手势识别

• 手势识别的过程
    – 显示一个GestureOverlayView,等待用户输入
      手势
    – 在手势输入的过程中不断跟GestureLibrary中
      包含的手势数据进行匹配
    – 如果结果达到一定的匹配度则认为手势识别成
      功


2011-10-20       Roger, UC
2011-10-20   Roger, UC
GestureListDemo




2011-10-20        Roger, UC
Reference
• http://android-
  developers.blogspot.com/2009/10/gestures-
  on-android-16.html
• http://android-
  developers.blogspot.com/2010/06/making-
  sense-of-multitouch.html
• http://www.cnblogs.com/over140/archive/2010
  /12/08/1899839.html


2011-10-20          Roger, UC
The End
Thank you for your listening
  Yours Sincerely, Roger

More Related Content

Similar to Motion and gesture in Android

透過 Windows Azure Mobile Services 開發各平台 Apps
透過 Windows Azure Mobile Services 開發各平台 Apps透過 Windows Azure Mobile Services 開發各平台 Apps
透過 Windows Azure Mobile Services 開發各平台 AppsEric ShangKuan
 
Tec android-01
Tec android-01Tec android-01
Tec android-01jinkaichen
 
Android 研发的昨天、今天 和 明天
Android 研发的昨天、今天 和 明天Android 研发的昨天、今天 和 明天
Android 研发的昨天、今天 和 明天oasisfeng
 
DevSecOps-The Key of Continuous Security
DevSecOps-The Key of Continuous SecurityDevSecOps-The Key of Continuous Security
DevSecOps-The Key of Continuous Security4ndersonLin
 
分会场九Windows 7迁移最佳实践
分会场九Windows 7迁移最佳实践分会场九Windows 7迁移最佳实践
分会场九Windows 7迁移最佳实践ITband
 
iPhone/iPad APP Development Class 101
iPhone/iPad APP Development Class 101iPhone/iPad APP Development Class 101
iPhone/iPad APP Development Class 101Ryan Chung
 
20141212 html5 及微軟跨平台佈局 long
20141212 html5 及微軟跨平台佈局   long20141212 html5 及微軟跨平台佈局   long
20141212 html5 及微軟跨平台佈局 longMeng-Ru (Raymond) Tsai
 
Android应用开发 - 沈大海
Android应用开发 - 沈大海Android应用开发 - 沈大海
Android应用开发 - 沈大海Shaoning Pan
 
Struts学习笔记
Struts学习笔记Struts学习笔记
Struts学习笔记yiditushe
 
Android 4-app
Android 4-appAndroid 4-app
Android 4-applydiafly
 
YUIconf2010介绍
YUIconf2010介绍YUIconf2010介绍
YUIconf2010介绍ling yu
 
Android進階UI控制元件
Android進階UI控制元件Android進階UI控制元件
Android進階UI控制元件艾鍗科技
 
IoT感測器驅動程式 在樹莓派上實作
IoT感測器驅動程式在樹莓派上實作IoT感測器驅動程式在樹莓派上實作
IoT感測器驅動程式 在樹莓派上實作艾鍗科技
 
IoT感測器驅動程式在樹莓派上實作 IoT Sensor Driver On The Raspberry Pi
IoT感測器驅動程式在樹莓派上實作 IoT Sensor Driver On The Raspberry PiIoT感測器驅動程式在樹莓派上實作 IoT Sensor Driver On The Raspberry Pi
IoT感測器驅動程式在樹莓派上實作 IoT Sensor Driver On The Raspberry PiIttrainingIttraining
 
Appscomm Product Catalog
Appscomm Product CatalogAppscomm Product Catalog
Appscomm Product CatalogAviva Lau
 
Ncut csie 102學年度專題成果簡報
Ncut csie 102學年度專題成果簡報Ncut csie 102學年度專題成果簡報
Ncut csie 102學年度專題成果簡報PN Wu (小平)
 
移动Web开发框架jqm探讨
移动Web开发框架jqm探讨移动Web开发框架jqm探讨
移动Web开发框架jqm探讨newker
 
Deviceaccess
DeviceaccessDeviceaccess
DeviceaccessTom Fan
 
20140418 - 體感技術對醫療照護之前瞻展望
20140418 - 體感技術對醫療照護之前瞻展望20140418 - 體感技術對醫療照護之前瞻展望
20140418 - 體感技術對醫療照護之前瞻展望Victor Gau
 

Similar to Motion and gesture in Android (20)

透過 Windows Azure Mobile Services 開發各平台 Apps
透過 Windows Azure Mobile Services 開發各平台 Apps透過 Windows Azure Mobile Services 開發各平台 Apps
透過 Windows Azure Mobile Services 開發各平台 Apps
 
Tec android-01
Tec android-01Tec android-01
Tec android-01
 
I os 07
I os 07I os 07
I os 07
 
Android 研发的昨天、今天 和 明天
Android 研发的昨天、今天 和 明天Android 研发的昨天、今天 和 明天
Android 研发的昨天、今天 和 明天
 
DevSecOps-The Key of Continuous Security
DevSecOps-The Key of Continuous SecurityDevSecOps-The Key of Continuous Security
DevSecOps-The Key of Continuous Security
 
分会场九Windows 7迁移最佳实践
分会场九Windows 7迁移最佳实践分会场九Windows 7迁移最佳实践
分会场九Windows 7迁移最佳实践
 
iPhone/iPad APP Development Class 101
iPhone/iPad APP Development Class 101iPhone/iPad APP Development Class 101
iPhone/iPad APP Development Class 101
 
20141212 html5 及微軟跨平台佈局 long
20141212 html5 及微軟跨平台佈局   long20141212 html5 及微軟跨平台佈局   long
20141212 html5 及微軟跨平台佈局 long
 
Android应用开发 - 沈大海
Android应用开发 - 沈大海Android应用开发 - 沈大海
Android应用开发 - 沈大海
 
Struts学习笔记
Struts学习笔记Struts学习笔记
Struts学习笔记
 
Android 4-app
Android 4-appAndroid 4-app
Android 4-app
 
YUIconf2010介绍
YUIconf2010介绍YUIconf2010介绍
YUIconf2010介绍
 
Android進階UI控制元件
Android進階UI控制元件Android進階UI控制元件
Android進階UI控制元件
 
IoT感測器驅動程式 在樹莓派上實作
IoT感測器驅動程式在樹莓派上實作IoT感測器驅動程式在樹莓派上實作
IoT感測器驅動程式 在樹莓派上實作
 
IoT感測器驅動程式在樹莓派上實作 IoT Sensor Driver On The Raspberry Pi
IoT感測器驅動程式在樹莓派上實作 IoT Sensor Driver On The Raspberry PiIoT感測器驅動程式在樹莓派上實作 IoT Sensor Driver On The Raspberry Pi
IoT感測器驅動程式在樹莓派上實作 IoT Sensor Driver On The Raspberry Pi
 
Appscomm Product Catalog
Appscomm Product CatalogAppscomm Product Catalog
Appscomm Product Catalog
 
Ncut csie 102學年度專題成果簡報
Ncut csie 102學年度專題成果簡報Ncut csie 102學年度專題成果簡報
Ncut csie 102學年度專題成果簡報
 
移动Web开发框架jqm探讨
移动Web开发框架jqm探讨移动Web开发框架jqm探讨
移动Web开发框架jqm探讨
 
Deviceaccess
DeviceaccessDeviceaccess
Deviceaccess
 
20140418 - 體感技術對醫療照護之前瞻展望
20140418 - 體感技術對醫療照護之前瞻展望20140418 - 體感技術對醫療照護之前瞻展望
20140418 - 體感技術對醫療照護之前瞻展望
 

More from rogeryi

Why your Android Apps Suck
Why your Android Apps SuckWhy your Android Apps Suck
Why your Android Apps Suckrogeryi
 
Web Page Rendering and Accelerated Compositing
Web Page Rendering and Accelerated CompositingWeb Page Rendering and Accelerated Compositing
Web Page Rendering and Accelerated Compositingrogeryi
 
Beyond Android Views - Window,Surface,Special Views,and More
Beyond Android Views - Window,Surface,Special Views,and MoreBeyond Android Views - Window,Surface,Special Views,and More
Beyond Android Views - Window,Surface,Special Views,and Morerogeryi
 
Android Hardware Accelerated 2D Rendering
Android Hardware Accelerated 2D RenderingAndroid Hardware Accelerated 2D Rendering
Android Hardware Accelerated 2D Renderingrogeryi
 
Voice recognization in Android
Voice recognization in AndroidVoice recognization in Android
Voice recognization in Androidrogeryi
 
Voice Recognization in Android
Voice Recognization in AndroidVoice Recognization in Android
Voice Recognization in Androidrogeryi
 
Character Encoding - Concepts and Practices
Character Encoding - Concepts and PracticesCharacter Encoding - Concepts and Practices
Character Encoding - Concepts and Practicesrogeryi
 
Java Memory Tips&Tricks
Java Memory Tips&TricksJava Memory Tips&Tricks
Java Memory Tips&Tricksrogeryi
 
Build local web server in 5 minutes with mongoose
Build local web server in 5 minutes with mongooseBuild local web server in 5 minutes with mongoose
Build local web server in 5 minutes with mongooserogeryi
 
Android Event Retrospect
Android Event RetrospectAndroid Event Retrospect
Android Event Retrospectrogeryi
 
Android event retrospect
Android event retrospectAndroid event retrospect
Android event retrospectrogeryi
 
Android Event 02-02-2011 Retrospect
Android Event 02-02-2011 RetrospectAndroid Event 02-02-2011 Retrospect
Android Event 02-02-2011 Retrospectrogeryi
 

More from rogeryi (12)

Why your Android Apps Suck
Why your Android Apps SuckWhy your Android Apps Suck
Why your Android Apps Suck
 
Web Page Rendering and Accelerated Compositing
Web Page Rendering and Accelerated CompositingWeb Page Rendering and Accelerated Compositing
Web Page Rendering and Accelerated Compositing
 
Beyond Android Views - Window,Surface,Special Views,and More
Beyond Android Views - Window,Surface,Special Views,and MoreBeyond Android Views - Window,Surface,Special Views,and More
Beyond Android Views - Window,Surface,Special Views,and More
 
Android Hardware Accelerated 2D Rendering
Android Hardware Accelerated 2D RenderingAndroid Hardware Accelerated 2D Rendering
Android Hardware Accelerated 2D Rendering
 
Voice recognization in Android
Voice recognization in AndroidVoice recognization in Android
Voice recognization in Android
 
Voice Recognization in Android
Voice Recognization in AndroidVoice Recognization in Android
Voice Recognization in Android
 
Character Encoding - Concepts and Practices
Character Encoding - Concepts and PracticesCharacter Encoding - Concepts and Practices
Character Encoding - Concepts and Practices
 
Java Memory Tips&Tricks
Java Memory Tips&TricksJava Memory Tips&Tricks
Java Memory Tips&Tricks
 
Build local web server in 5 minutes with mongoose
Build local web server in 5 minutes with mongooseBuild local web server in 5 minutes with mongoose
Build local web server in 5 minutes with mongoose
 
Android Event Retrospect
Android Event RetrospectAndroid Event Retrospect
Android Event Retrospect
 
Android event retrospect
Android event retrospectAndroid event retrospect
Android event retrospect
 
Android Event 02-02-2011 Retrospect
Android Event 02-02-2011 RetrospectAndroid Event 02-02-2011 Retrospect
Android Event 02-02-2011 Retrospect
 

Motion and gesture in Android

  • 1. Motion and Gesture in Android Roger yixx@ucweb.com roger2yi@gmail.com www.twitter.com/roger2yi https://plus.google.com/
  • 2. Motion Event • 系统通过MotionEvent传递触屏事件给应用 – View.onTrackballEvent(MotionEvent) – View.onTouchEvent(MotionEvent) • MotionEvent – action code – axis values (x, y) 2011-10-20 Roger, UC
  • 3. Action Code • Action Code指定了状态的变化 – ACTION_DOWN – ACTION_UP – ACTION_MOVE – ACTION_CANCEL – ACTION_POINTER_DOWN – ACTION_PONTER_UP 2011-10-20 3
  • 4. Cont. • 对于ACTION_POINTER_DOWN和 ACTION_PONTER_UP,Action Code中还 包含了该Pointer的Index数据 final int pointerIndex = (ev.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT; 2011-10-20 Roger, UC
  • 5. Multi-touch Multi-touch • Android 2.2 (SDK-8) 加入了多点触摸的支持 – MotionEvent可以包含一个或多个Pointer的数据 – 每个Pointer在整个Motion(Down -> Move -> Up) 的过程中会分配一个Id,作为这个Pointer的唯一标记 – 可以通过Pointer的Index获得Id或者相反 – getX,getY可以通过传入的Index参数获得多个 Pointer的位置 2011-10-20 Roger, UC
  • 6. Gesture Detector • Android 2.2 SDK提供了简单手势识别器用 于识别若干常用的手势 – Long Pressed – Fling (Flick) – Double Tap – Scale (Pinch) • 应用可以提供自己的手势识别器支持更多 的手势识别,比如Two Fingers Tap, Three Fingers Tap... 2011-10-20 Roger, UC
  • 7. private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener { @Override public boolean onScale(ScaleGestureDetector detector) { mScaleFactor *= detector.getScaleFactor(); // Don't let the object get too small or too large. mScaleFactor = Math.max(0.1f, Math.min(mScaleFactor, 5.0f)); invalidate(); return true; } } ... ... public boolean onTouchEvent(MotionEvent ev) { // Let the ScaleGestureDetector inspect all events. mScaleDetector.onTouchEvent(ev); 2011-10-20 Roger, UC
  • 8. 应用自定义手势的支持 应用自定义 手势的 自定义手势 • Android提供了对自定义手势的比较完整的 支持(1.6+),包括 – 生成手势的轨迹数据(支持不连续的笔画输 入,但不支持多点),并保存到外部文件 – 拦截用户的触屏输入,跟加载的手势数据(包 含多个手势)做匹配 – 返回给应用可能匹配的手势 • 类似海豚浏览器的手势输入的功能,完全 依赖于SDK提供的支持就可以实现 2011-10-20 Roger, UC
  • 9. Gesture Builder • 模拟器自带一个Gesture Builder用于生成手势数据(源 码在SDK Samples里面) • 应用可以使用它来预先生成内 置手势 • 应用也可以让用户生成新的手 势 • 最后生成的手势数据可以通过 GestureLibrary保存到外部文件 中 2011-10-20 Roger, UC
  • 11. Cont. • 创建手势的过程 – 显示一个GestureOverlayView,等待用户输入 手势 – 当手势输入完毕后从GestureOverlayView获得 Gesture对象 – 创建一个GestureLibrary(可以先加载旧的手 势数据) – 将新的Gesture对象加入该Library并保存 2011-10-20 Roger, UC
  • 12. 2011-10-20 Roger, UC
  • 13. 手势识别 手势识别 • 手势识别的过程 – 显示一个GestureOverlayView,等待用户输入 手势 – 在手势输入的过程中不断跟GestureLibrary中 包含的手势数据进行匹配 – 如果结果达到一定的匹配度则认为手势识别成 功 2011-10-20 Roger, UC
  • 14. 2011-10-20 Roger, UC
  • 16. Reference • http://android- developers.blogspot.com/2009/10/gestures- on-android-16.html • http://android- developers.blogspot.com/2010/06/making- sense-of-multitouch.html • http://www.cnblogs.com/over140/archive/2010 /12/08/1899839.html 2011-10-20 Roger, UC
  • 17. The End Thank you for your listening Yours Sincerely, Roger