触摸板的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;
    }
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值