现在的位置: 首页 > 综合 > 正文

symbian 5th学习小结(拖动和pkg)

2013年09月15日 ⁄ 综合 ⁄ 共 1334字 ⁄ 字号 评论关闭

最近一直在弄移植,将3rd的程序移植到5th上,个人感觉,如果使用的都是系统控件的话,那么工程将要改动的地方很少。可能主要的工作就是添加上触摸事件。如果你的前任将接口或者代码写的比较好的话,那么恭喜你改起来会相当容易。

 

说一下我的心得吧,刚刚接触触摸事件,有点不大适应。会用的也就EButton1DownEButton1Up这两个事件,至于拖动EDrag和EMove直接不用也不明白,现在感到很欣慰的是EDrag搞明白了点,而EMove现在也不懂,希望高手留言指点下。

 

如果现在symbian实现拖动,相对来说还是比较容易的。举个例子来说,我想实现一个矩形在屏幕上的拖动。

 

首先,先定义个成员 TRect iRect;

然后在Draw函数中画整个矩形,在这里不累述了。

 

之后就是处理拖动事件。

 

当点击屏幕的时候会产生个EButton1Down事件,这里一般我们需要记录一下他的位置可以用事件的iPosition这个成员获取到你点击的位置,TPoint point1;

 

如果你一直在屏幕上,然后拖动,那么接下来系统会不停的回调HandlePointerEvent这个函数,然后事件类型iType是EDrag,这个时候我们只需要这样写,如下

if ( aPointerEvent.iType == TPointerEvent::EDrag )
{

TPoint point2 = aPointerEvent.iPosition - point1;  //相对于第一个点移动的位置

iRect.Move(point2 ); //

point1 = aPointerEvent.iPosition  //记录这次拖动的事件的位置

DrawNow();

}

 

 

这样就可以实现矩形的拖动了,当然触摸事件还没有结束,还会相应一个事件。

 

最后会相应EButton1Down这个事件。

 

如果当初的是点击下屏幕,那么就只会有EButton1DownEButton1Down两个事件。

 

所以最后是在处理时间的时候,写下判断条件,因为handlePointerEvent一般是会调用两边的。

 

加上相应的触摸后,基本3rd转5th的工作就OK了。

 

最后是打包了,如果当时是3rd生成的工程,当然打包后可以直接用,但是一般会在安装的时候提示软件可能不兼容等等提示信息。这个时候开个UID就好。将pkg中的0x101F7961改为0x1028315F。对于具体的UID的介绍可以看下一遍blog。

 

暂时先写这么多了,如果有说的不对和不足的地方,希望路过的大牛小牛,大神大婶们留个脚印。

 

注:要想使用EDrag,别忘了在container的ConstructL中加一句EnableDragEvents();

 

这几天又发现些问题,可能是3rd的开发习惯了,也有可能是对于触摸事件处理没有经验的原因吧!出了些很理想化的问题。比如我一个简单的点击事件。我单纯的认为就会产生一个down和up事件,理论上是这样,但是现实总是残酷的。往往一些屏幕比较差的机器,在你想单纯的产生一个点击的事件(就是我们理想的down和up事件)的时候,往往都会产生一个EDrag(拖动)事件,所以大家在处理触摸事件的时候,最好是将拖动距离很短的事件也判断为一个简单的点击事件。

 

抱歉!评论已关闭.