Symbian S60 5th 实现拖拽效果
2010-01-29 11:00
288 查看
Symbian S60从第五版开始支持触摸屏。从SDK中可知,触摸事件是由控件接受处理,开发者需要继承
有了这个函数,我们按照自己的想法来设计很多事件,比如触摸动作(触摸手势),关于这个的详细讨论可以看Nokia Wiki。
下面介绍一个基于这个函数实现的拖拽效果。
首先,要使得程序能够接收到EDrag事件,需要在CSampleContainer(继承自CCoeControl)的构造函数中调用EnableDragEvents()。
其次,弄清楚S60 5th对EButton1Down, EButton1Up, EDrag 的响应方式。当我们在手机屏幕上拖拽时,首先,当触摸笔或手指按到屏幕上,EButton1Down事件会被响应,然后在拖拽过程中会周期性的响应EDrag事件,这个周期可以不用考虑(需要详细了解的可以查看SDK中SetMinInterDragInterval() 函数)。在离开屏幕时又会相应EButton1Up事件。据此响应事件,可以实现拖拽的效果。
下面是一个对超过屏幕显示高度的长文本显示实现上下拖拽的简单示例:
iYbase是偏移量,也就是首行文字的纵坐标。Draw()函数根据这个坐标在屏幕上绘制文本。iDeltaY记录上一次EDrag响应时触摸笔坐标与初始触摸笔坐标的纵向差,以此计算新的iYbase。
现在,屏幕上的文字就随着你的手指上下移动了。当然稍加修改即可实现任意方向的拖拽。
这篇文章写的比较简单,修改后的文章在这里,应该比较详细了,并且加上了一个示例。示例代码下载地址:http://yctx.me/file/DragExample.zip
CCoeControl:HandlePointerEventL()来处理触摸事件。一个简单使用此函数的例子如下(注意在MMP文件中需加入"LIBRARY cone.lib"):
void CSampleContainer::HandlePointerEventL(const TPointerEvent& aPointerEvent) { switch (aPointerEvent.iType) { case TPointerEvent::EButton1Down: { // Button 1 down // Get pointer position TPoint positionX = aPointerEvent.iPosition.iX; TPoint positionY = aPointerEvent.iPosition.iY; break; } case TPointerEvent::EButton1Up: { // button 1 up break; } case TPointerEvent::EDrag: { // drag event break; } case TPointerEvent::EMove: { // move event break; } default: { // do something break; } } }
有了这个函数,我们按照自己的想法来设计很多事件,比如触摸动作(触摸手势),关于这个的详细讨论可以看Nokia Wiki。
下面介绍一个基于这个函数实现的拖拽效果。
首先,要使得程序能够接收到EDrag事件,需要在CSampleContainer(继承自CCoeControl)的构造函数中调用EnableDragEvents()。
其次,弄清楚S60 5th对EButton1Down, EButton1Up, EDrag 的响应方式。当我们在手机屏幕上拖拽时,首先,当触摸笔或手指按到屏幕上,EButton1Down事件会被响应,然后在拖拽过程中会周期性的响应EDrag事件,这个周期可以不用考虑(需要详细了解的可以查看SDK中SetMinInterDragInterval() 函数)。在离开屏幕时又会相应EButton1Up事件。据此响应事件,可以实现拖拽的效果。
下面是一个对超过屏幕显示高度的长文本显示实现上下拖拽的简单示例:
void CSampleContainer::HandlePointerEventL(const TPointerEvent& aPointerEvent) { switch (aPointerEvent.iType) { case TPointerEvent::EButton1Down: { // Button 1 down //iDeltaY和iPositionY是成员变量 iDeltaY=0; iPositionY = aPointerEvent.iPosition.iY; break; } case TPointerEvent::EButton1Up: { // button 1 up break; } case TPointerEvent::EDrag: { int y = aPointerEvent.iPosition.iY-iDragPoint.iY; iYbase = iYbase - iDeltaY + y; iDeltaY = y; if(iYbase>0) iYbase=0; if (iYbase<-iTotalHeight+iScreenHeight) iYbase=-iTotalHeight+iScreenHeight; break; } case TPointerEvent::EMove: { // move event break; } default: { // do something break; } } }
iYbase是偏移量,也就是首行文字的纵坐标。Draw()函数根据这个坐标在屏幕上绘制文本。iDeltaY记录上一次EDrag响应时触摸笔坐标与初始触摸笔坐标的纵向差,以此计算新的iYbase。
现在,屏幕上的文字就随着你的手指上下移动了。当然稍加修改即可实现任意方向的拖拽。
这篇文章写的比较简单,修改后的文章在这里,应该比较详细了,并且加上了一个示例。示例代码下载地址:http://yctx.me/file/DragExample.zip
相关文章推荐
- WPF拖拽效果实现
- Android 可拖拽的GridView效果实现, 长按可拖拽和item实时交换
- js实现拖拽效果
- js实现本地图片文件拖拽效果
- Android 可拖拽的GridView效果实现, 长按可拖拽和item实时交换
- javascript实现完美拖拽效果
- js实现简单鼠标拖拽,文件拖入文件夹效果
- 拖拽效果的实现原理分析2
- 45.实现自定义View拖拽效果的5种方法
- jquery方法+js一般方法+js面向对象方法实现拖拽效果
- 用C#写了个x64版IE9的BHO,实现了超级拖拽的效果。
- Createjs学习心得之使用EaselJs实现拖拽效果
- Javascript实现重力弹跳拖拽运动效果
- JavaScript实现的简单拖拽效果
- 使用b2MouseJoint实现鼠标拖拽刚体的效果
- PyQt5学习记录(7)---监听鼠标拖拽事件实现Mac上百度云盘拖拽效果
- 使用Eclipse构建Symbian S60 5th Edition J2ME开发平台
- 如何搭建Symbian S60 5th的C++开发环境
- 会话框拖拽效果实现