是这样的  我在一个view 里面放一条线例如(y=100) 当我手指从屏幕上划过这条线时(在线上那一瞬间)   我希望触发一个事件  。 就好比一个古筝  上面有很多铉  手指划过会响,而且只响一声。 当手指速度快时 我在view 的 ontouchEvent 里面收到的坐标都是一些不连续的坐标 例如 98.88 、 104.100、105.22.........一些散点..(当然 ontouch 事件也一样)  这样子,划过就不一定能触发y=100 了(当然设置了一个范围 也在不同的速度里可能得不到y=100 而且有时候会有重复的值落到这个范围里面)。真不知道该咋滴,希望大家指点一下.....thxandroid触屏坐标

解决方案 »

  1.   

    在ACTION_MOVE里比较本次事件和上次事件的坐标 如果跨过了弦就响
    y0<100<y1 || y0>100>y1 || y1 == 100
      

  2.   

    单独用View画一条线,width=match_parent,height=2dp,对这个View设置onTouch呢?应该比判断View里的一条线是否onTouch要简单多了。
      

  3.   


    这个也尝试过,但是如果从其他控件点下去 再移动到该view 上 好像触发不了 ontouch 事件,不知道为啥(我已经返回true ),也就是手指从别处划过那条线不会响,单独去点那条线就会响....
      

  4.   

    楼主,建议你换一种方法,采用GestureDetector类监听手指的滑动。
    mGestureDetector = new GestureDetector(mContext.getApplicationContext(),
                    new DialpadGestureDetector(), null, false);
    private class DialpadGestureDetector extends GestureDetector.SimpleOnGestureListener {
            @Override
            public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
                if ((e1.getY()<100 && e2.getY()>100) || (e1.getY()>100 && e2.getY<100)) {
                //ok,手指划过,当然这个if也可能不是这么写,楼主稍微调试一下,应该没问题
                }
                return true
            }
        }
        
        //重写ViewGroup这个方法
        @Override
        public boolean onInterceptTouchEvent(MotionEvent ev) {
            mGestureDetector.onTouchEvent(ev);
            return false;
        }
      

  5.   


    嗯,首先谢谢你的推荐,学习了一下,你介绍的这个方法 onFling() 是要在限定的时间内划过一小段距离down-------up 才触发 onfling()  实时性不够,还有当用户手指迟迟未离开触摸屏的话,过了那段限定时间,就不会再触发onfling()了。
      

  6.   


    嗯,首先谢谢你的推荐,学习了一下,你介绍的这个方法 onFling() 是要在限定的时间内划过一小段距离down-------up 才触发 onfling()  实时性不够,还有当用户手指迟迟未离开触摸屏的话,过了那段限定时间,就不会再触发onfling()了。
    不是吧?这个没有限定时间,只是有个速度值velocityY,这个值你可以不用管,那么无论怎么划,划多久都没关系。
      

  7.   

     有测试过的哦,....在我的真机上测试的结果,每次比较短的down----up 就会有一行记录输出,分别是down 的y坐标 和up的y坐标
    10-29 22:55:30.322: I/------------------------(20050):  267.13834----543.20355
    10-29 22:55:35.682: I/------------------------(20050):  226.06522----311.57813
    10-29 22:55:36.192: I/------------------------(20050):  241.55182----304.84482
    10-29 22:55:36.652: I/------------------------(20050):  224.04523----304.84482
    10-29 22:55:37.077: I/------------------------(20050):  236.8385----301.47818
    10-29 22:55:37.497: I/------------------------(20050):  238.85849----300.1315
    10-29 22:55:37.917: I/------------------------(20050):  242.22516----306.8648
    10-29 22:55:38.397: I/------------------------(20050):  236.16519----313.5981
    10-29 22:55:38.872: I/------------------------(20050):  215.29196----315.6181
    10-29 22:55:39.362: I/------------------------(20050):  184.31879----279.9118
      

  8.   

    onFling不行的话用onScroll试过不?