`
rayloo
  • 浏览: 89012 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

触摸板的pointerDragged事件的处理

阅读更多
移植MIDP2程序到手写板设备,开始的时候对于pointerDragged事件kvm的通知机制没有什么印象,直接在pointerDragged的方法内打印通知过来的坐标.

在MOTO的Linux手写板的模拟器上测试,得出的结论是底层的kvm在stylus没有离开触摸屏的状态下,一旦x或者y坐标移动了两个象素就会通知canvas.

对于点击事件,一个x,y坐标足矣;但是对于拖拽事件的处理,默认的处理只是通知当前最新的坐标,显然是无法判断运动轨迹的方向,最简单的就是做一个轨迹坐标缓冲区,存储一定长度的拖拽移动轨迹,在程序中的实现也是这样,关键的功能代码部分:

/**
* <pre>
* 由于拖动的动作会将整个移动的轨迹坐标发过来,这里将
* 先建立一个轨迹的缓冲,只有缓冲区填满后才会触发注册
* 的组件的pointerDragged的方法通知事件.
*
* 缓冲区深度的不宜过大,深的缓冲区将导致微小的拖动操作
* 被系统忽略;深度太浅的话缓冲区本身也就没有意义了.
*
* 组件通过查询轨迹缓冲区可以得知拖动的方向和拖动的距离.
* </pre>
*/
public static final int TRACK_POS_BUF_DEPTH = 3;
public int[][] trackPosBuffer = new int[TRACK_POS_BUF_DEPTH][2];
private short trackBufPos = 0;//must be less than the length of the register!

/**
* 重置归位轨迹缓冲区.
*
*/
private void resetTrackPosBuffer() {
for (int i = 0; i < trackPosBuffer.length; i++) {
trackPosBuffer[i][0] = trackPosBuffer[i][1] = 0;
}
trackBufPos = 0;
}
/**
* 记录拖动的轨迹,一旦寄存器填满的时候返回true,否则返回false.
* @param x
* @param y
* @return
*/
private boolean bufferTrackPos(int x, int y) {
if (this.trackBufPos >= TRACK_POS_BUF_DEPTH)
this.resetTrackPosBuffer();

boolean result = false;
if (this.trackBufPos == (TRACK_POS_BUF_DEPTH - 1)) {
result = true;
} else {
result = false;
}
trackPosBuffer[this.trackBufPos][0] = x;
trackPosBuffer[this.trackBufPos][1] = y;
this.trackBufPos++;

return result;
}
分享到:
评论

相关推荐

    13. 画布开发2按键和指针事件2.rar

    - 在实际开发中,你需要创建一个继承自Canvas的自定义类,然后重写上述事件处理方法,根据应用需求添加相应的业务逻辑。 - 使用`Graphics`对象进行绘图,如设置颜色、绘制线条、填充形状、显示文本等。 - 考虑到...

    13. 画布开发2按键和指针事件1.rar

    本教程主要关注画布上的按键和指针事件处理,这将帮助我们创建更动态和响应式的应用程序。 首先,我们需要了解J2ME中的`Canvas`类。它是`Displayable`接口的子类,提供了一个空白的画布供我们绘制图形。开发者可以...

    J2ME触摸屏输入小实例-Canvas

    除了以上基本的触摸事件处理,我们还需要考虑触摸屏设备可能存在的多样性。不同的设备可能支持不同类型的输入,比如单击、双击、长按等。为了支持这些,我们需要添加额外的逻辑,例如使用定时器检测连续点击或长按...

    java_touch_screen_code.java.zip_j2me touch_j2me touch screen_tou

    3. **触摸事件处理**:由于J2ME不直接支持触摸事件,你需要通过监听键盘事件或`Pointer` 类的`pointerDragged()` 和 `pointerClicked()` 方法来模拟触摸操作。在某些设备上,可能需要监听特定的键码(例如,某些设备...

    J2ME实现画图程序

    虽然代码片段未给出完整的绘图逻辑,但我们可以推断出剩余部分可能包括追踪和绘制用户手势的逻辑,这通常涉及到在 `PointerDragged` 事件处理中更新 `currentx` 和 `currenty` 坐标,并在 `Graphics` 对象上绘制线条...

    J2ME实用教程PPT\课件5

    - **触控事件**:Pointer Events(触控事件)主要包括点击和滑动等,处理这类事件的方法可能包括`pointerPressed()`, `pointerReleased()`, `pointerDragged()`等,使开发者能够实现精细的触摸操作。 **MIDP Timer ...

    MIDP-canvas.rar_J2ME 界面_MIDP canvas_canvas_canvas j2_j2me

    **J2ME MIDP Canvas 知识点详解** ...通过熟练掌握Canvas 的基本操作和事件处理,可以创建出丰富的、互动性强的移动应用。在实际项目中,结合文档学习和实践,将有助于提升对Canvas 编程的理解和应用能力。

    J2ME cANVAS

    同样,可以重写 `pointerPressed()`, `pointerReleased()`, 和 `pointerDragged()` 来处理触摸屏或方向键的输入。 以下是一些使用 `Canvas` 进行图形绘制的关键知识点: 1. **初始化**:在 `Canvas` 类的构造函数...

    J2ME中文API帮助文档

    10. `pointerDragged()`, `pointerPressed()`, `pointerReleased()`:处理指针事件,如触摸屏的拖动、按下和释放。 11. `repaint()` 和 `repaint(x, y, width, height)`:刷新Canvas的全部或部分区域。 12. `...

    12. 画布开发1Canvas绘图2.rar

    3. **事件处理**:Canvas支持键盘和触摸事件。通过覆写 `keyPressed()`、`keyReleased()` 和 `keyRepeated()` 方法处理键盘输入,以及 `pointerPressed()`、`pointerReleased()` 和 `pointerDragged()` 处理触摸事件...

    j2me中文api(简陋版),自己翻译的,目前只翻译了常用的方法

    11. `pointerDragged()`, `pointerPressed()`, `pointerReleased()`:处理指针(如触摸屏)的拖动、按下和释放事件。 12. `repaint()`, `repaint(int x, int y, int width, int height)`:重新绘制画布的全部或部分...

    J2ME开发 用Canvas类显示png,jpg图片

    Canvas是J2ME MIDP(Mobile Information Device Profile)库中的一个关键组件,它是一个可定制的屏幕区域,开发者可以在这个区域内进行绘画和事件处理。Canvas继承自Displayable,因此可以添加到当前的显示屏上,供...

    J2ME手机按钮开发

    本文介绍了在 J2ME 中自定义按钮的基本步骤,包括按钮的绘制、触摸事件处理以及通过按钮触发的网络请求。通过以上方法,可以在 J2ME 的应用中实现更加灵活和丰富的用户交互。需要注意的是,随着移动设备的发展和技术...

Global site tag (gtag.js) - Google Analytics