SlideShare a Scribd company logo
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

PDF
Layout Management - Android and Qt
PPS
Android开发概览
PDF
AngularJS training in Luster
PPTX
Html5移动网站开发实践
PPTX
When Android meets RxJava
PDF
3x3 移动app快速迭代与发布
PDF
08 Notification and Rotation
PPTX
Flutter Forward Extended in Google Developer Taipei
Layout Management - Android and Qt
Android开发概览
AngularJS training in Luster
Html5移动网站开发实践
When Android meets RxJava
3x3 移动app快速迭代与发布
08 Notification and Rotation
Flutter Forward Extended in Google Developer Taipei

Similar to Motion and gesture in Android (20)

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

More from rogeryi (12)

PPT
Why your Android Apps Suck
PDF
Web Page Rendering and Accelerated Compositing
PPT
Beyond Android Views - Window,Surface,Special Views,and More
PDF
Android Hardware Accelerated 2D Rendering
PDF
Voice recognization in Android
PDF
Voice Recognization in Android
PDF
Character Encoding - Concepts and Practices
PPTX
Java Memory Tips&Tricks
PDF
Build local web server in 5 minutes with mongoose
PPT
Android Event Retrospect
PDF
Android event retrospect
PPT
Android Event 02-02-2011 Retrospect
Why your Android Apps Suck
Web Page Rendering and Accelerated Compositing
Beyond Android Views - Window,Surface,Special Views,and More
Android Hardware Accelerated 2D Rendering
Voice recognization in Android
Voice Recognization in Android
Character Encoding - Concepts and Practices
Java Memory Tips&Tricks
Build local web server in 5 minutes with mongoose
Android Event Retrospect
Android event retrospect
Android Event 02-02-2011 Retrospect
Ad

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