触摸板的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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值