移植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;
}
分享到:
相关推荐
- 在实际开发中,你需要创建一个继承自Canvas的自定义类,然后重写上述事件处理方法,根据应用需求添加相应的业务逻辑。 - 使用`Graphics`对象进行绘图,如设置颜色、绘制线条、填充形状、显示文本等。 - 考虑到...
本教程主要关注画布上的按键和指针事件处理,这将帮助我们创建更动态和响应式的应用程序。 首先,我们需要了解J2ME中的`Canvas`类。它是`Displayable`接口的子类,提供了一个空白的画布供我们绘制图形。开发者可以...
除了以上基本的触摸事件处理,我们还需要考虑触摸屏设备可能存在的多样性。不同的设备可能支持不同类型的输入,比如单击、双击、长按等。为了支持这些,我们需要添加额外的逻辑,例如使用定时器检测连续点击或长按...
3. **触摸事件处理**:由于J2ME不直接支持触摸事件,你需要通过监听键盘事件或`Pointer` 类的`pointerDragged()` 和 `pointerClicked()` 方法来模拟触摸操作。在某些设备上,可能需要监听特定的键码(例如,某些设备...
虽然代码片段未给出完整的绘图逻辑,但我们可以推断出剩余部分可能包括追踪和绘制用户手势的逻辑,这通常涉及到在 `PointerDragged` 事件处理中更新 `currentx` 和 `currenty` 坐标,并在 `Graphics` 对象上绘制线条...
- **触控事件**:Pointer Events(触控事件)主要包括点击和滑动等,处理这类事件的方法可能包括`pointerPressed()`, `pointerReleased()`, `pointerDragged()`等,使开发者能够实现精细的触摸操作。 **MIDP Timer ...
**J2ME MIDP Canvas 知识点详解** ...通过熟练掌握Canvas 的基本操作和事件处理,可以创建出丰富的、互动性强的移动应用。在实际项目中,结合文档学习和实践,将有助于提升对Canvas 编程的理解和应用能力。
同样,可以重写 `pointerPressed()`, `pointerReleased()`, 和 `pointerDragged()` 来处理触摸屏或方向键的输入。 以下是一些使用 `Canvas` 进行图形绘制的关键知识点: 1. **初始化**:在 `Canvas` 类的构造函数...
10. `pointerDragged()`, `pointerPressed()`, `pointerReleased()`:处理指针事件,如触摸屏的拖动、按下和释放。 11. `repaint()` 和 `repaint(x, y, width, height)`:刷新Canvas的全部或部分区域。 12. `...
3. **事件处理**:Canvas支持键盘和触摸事件。通过覆写 `keyPressed()`、`keyReleased()` 和 `keyRepeated()` 方法处理键盘输入,以及 `pointerPressed()`、`pointerReleased()` 和 `pointerDragged()` 处理触摸事件...
11. `pointerDragged()`, `pointerPressed()`, `pointerReleased()`:处理指针(如触摸屏)的拖动、按下和释放事件。 12. `repaint()`, `repaint(int x, int y, int width, int height)`:重新绘制画布的全部或部分...
Canvas是J2ME MIDP(Mobile Information Device Profile)库中的一个关键组件,它是一个可定制的屏幕区域,开发者可以在这个区域内进行绘画和事件处理。Canvas继承自Displayable,因此可以添加到当前的显示屏上,供...
本文介绍了在 J2ME 中自定义按钮的基本步骤,包括按钮的绘制、触摸事件处理以及通过按钮触发的网络请求。通过以上方法,可以在 J2ME 的应用中实现更加灵活和丰富的用户交互。需要注意的是,随着移动设备的发展和技术...