×
Namespaces

Variants
Actions

Symbian^3 多点触摸

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

代码示例
文章
shenjianguo 在 07 May 2010 创建
最后由 hamishwillee 在 15 Dec 2011 编辑

本例利用Symbian^3支持多点触摸功能,实现图片的拖拽,缩放,旋转 (本例利用了nokia forum 上图片处理的例子)

创建工程TouchDemo

1. 为支持多点触摸,symbian^3 的Rwindow 类增加了API: EnableAdvancedPointers,在构造函数ConstructL中,在 CreateWindowL后面,加上:

Rwindow& window = Window();  获得当前窗口 window.EnableAdvancedPointers();

在在HandlePointerEventL函数中 const TAdvancedPointerEvent* event = aPointerEvent.AdvancedPointerEvent(); if(!event) { // The TPointerEvent isn't an instance of TAdvancedPointerEvent User::Leave(KErrArgument); }

   检查是否为多点事件

2. 缩放 Symbian^3 关于多点的处理不同于iphone,iphone是把全部事件放在数组中一次处理,symbian^3的处理要复杂一点,每次只处理一点的事件,通过TAdvancedPointerEvent::PointerNumber(),可以得到当前事件的ID,序号从0开始,如果有两个点(两个手指),那就是0和1,缩放需要两点事件。 多点事件与单点事件的类型是以样的,都有: enum TType { EButton1Down,  button1, pen, finger, down EButton1Up,  button1, pen, finger, up

EButton2Down, EButton2Up, EButton3Down, EButton3Up,

EDrag,

EMove, EButtonRepeat, ESwitchOn, EOutOfRange, EEnterCloseProximity, EExitCloseProximity, EEnterHighPressure, EExitHighPressure, ENullType = -1 }; 我们要涉及到的事件类型有 EButton1Down,Edrag

在EButton1Down,两手指落下时记录下两点的位置,保存为iLastPoint1,iLastPoint2 在 Edrag,手指拖动时,也得到两点的位置,这时计算前后两次事件中两点的距离,EButton1Down为距离1,Edrag为距离2。当距离1大于距离2,并超过一个数值,我们称为threshold,则认为是放大; 当距离1小于距离2,并超过一个数值,则认为是缩小。我们用CalculateDistance函数计算两点距离。


3. 拖拽 单点事件,手指向左滑动,切换到下一副图片,手指向右滑动,切换到上一副图片。 这里需要检查是单点事件还是多点事件,引入新的变量 iIsAdvanced 标记是否多点事件, EButton1Down,TAdvancedPointerEvent::PointerNumber() 为0时,iIsAdvanced = Efalse, 先假定是单点事件,若EButton1Down,TAdvancedPointerEvent::PointerNumber() 得到1,说明有两点,则一定是多点事件了。若在Edrag 事件之前未获得ID为1的事件,我们就认为这是单点事件了。 剩下的事情比较简单,比较一下前后两点的位置,我们在Y方向限制一个范围,超出范围就认为不是滑动。若X2 <X1,并超过threshold,左滑;若X2>X1,并超过threshold,右滑。


4. 旋转 还是处理两点事件,EButton1Down,通过两点位置,计算得到相对水平方向的角度:iAngle,Edrag事件我们又可以得到一个角度angle。两个角度比较,angle > iAngle,并超过一个值,则认为是逆时针旋转; angle < iAngle,并超过一个值,则认为是顺时针旋转。

代码File:TouchDemo.zip

This page was last modified on 15 December 2011, at 09:16.
106 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×