[学习]触摸屏拖拽事件处理

来源:互联网 发布:北京图龙网络工司 编辑:程序博客网 时间:2024/04/27 14:28
移植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;
    }
 
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 合租的室友关门开门特别大声怎么办 三周岁的宝宝小阴唇再次粘连怎么办 小阴唇内侧长了毛囊炎很大疼怎么办 小阴唇上一个黄豆大的硬疙瘩怎么办 梦幻西游手游金币兑换上限了怎么办 手机放裤子口袋里易拔出怎么办 两个月宝宝拉肚子怎么办吃纯母乳 花王泡沫染停留时间太久怎么办 ps右下角的图层图标隐藏了怎么办 压缩包文件太大微信无法传送怎么办 一寸照片的尺寸在ps中怎么办 遇到尖酸刻薄爱数落人的领导怎么办 初中一年级的学生就不想读书怎么办 电脑上所有文件都变得很大怎么办 小孩子手被门缝夹肿了怎么办 阳台挂衣服的单杆掉下来了怎么办 九个月婴儿受凉声音变沙哑怎么办 以汉字为主题的手抄报怎么办 用惯了笔画打字打不来拼音怎么办 老条石头给淤泥弄黑怎么办 新买的沙发垫子味很大怎么办 电脑表格中删去多余框线怎么办 农村教学点招不到学生老师怎么办 wps卡死了打的东西没保存怎么办 华为手机浏览器边框颜色变了怎么办 打印机打出来的字两边少怎么办 wps表格分页时表格断了怎么办 word里的表格一页放不下怎么办 表格上红色的字不能删除怎么办 渐变区的选择框变得很大怎么办 用乐秀编辑短片后两边有边框怎么办 安卓手机相机图标没有了怎么办 三星s6不充电就死机了怎么办 三星s7通话感应器不管用了怎么办 卡贴苹果8p一直跳激活怎么办? 宝宝添了小狗添过的袋子怎么办 猫咪卡在屋顶的缝隙里怎么办 大臂的图案纹小了怎么办 双面板已经贴片还要插件后焊怎么办 黑板摔在地上有木头屑怎么办 白衣服蓝袖子漂花了怎么办