android 关于获取特定触点坐标
是这样的 我在一个view 里面放一条线例如(y=100) 当我手指从屏幕上划过这条线时(在线上那一瞬间) 我希望触发一个事件 。 就好比一个古筝 上面有很多铉 手指划过会响,而且只响一声。 当手指速度快时 我在view 的 ontouchEvent 里面收到的坐标都是一些不连续的坐标 例如 98.88 、 104.100、105.22.........一些散点..(当然 ontouch 事件也一样) 这样子,划过就不一定能触发y=100 了(当然设置了一个范围 也在不同的速度里可能得不到y=100 而且有时候会有重复的值落到这个范围里面)。真不知道该咋滴,希望大家指点一下.....thx android 触屏 坐标 --------------------编程问答-------------------- 在ACTION_MOVE里比较本次事件和上次事件的坐标 如果跨过了弦就响y0<100<y1 || y0>100>y1 || y1 == 100 --------------------编程问答-------------------- 单独用View画一条线,width=match_parent,height=2dp,对这个View设置onTouch呢?应该比判断View里的一条线是否onTouch要简单多了。 --------------------编程问答--------------------
亲,这个已经想过...如果速度过快 坐标一下子从 95.000 跳到103.12112 这样子 手虽然划过 但是不会响的。嗯我想要的效果 就像有些吉他弹奏 应用一样...无论速度多快 他都会响 --------------------编程问答--------------------
这个也尝试过,但是如果从其他控件点下去 再移动到该view 上 好像触发不了 ontouch 事件,不知道为啥(我已经返回true ),也就是手指从别处划过那条线不会响,单独去点那条线就会响.... --------------------编程问答-------------------- 其他小伙伴有没有意见啊,希望能解决这个问题,人家那些吉他应用是可以的,自顶.... --------------------编程问答-------------------- 楼主,建议你换一种方法,采用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;
}
嗯,首先谢谢你的推荐,学习了一下,你介绍的这个方法 onFling() 是要在限定的时间内划过一小段距离down-------up 才触发 onfling() 实时性不够,还有当用户手指迟迟未离开触摸屏的话,过了那段限定时间,就不会再触发onfling()了。 --------------------编程问答--------------------
不是吧?这个没有限定时间,只是有个速度值velocityY,这个值你可以不用管,那么无论怎么划,划多久都没关系。 --------------------编程问答-------------------- 你实际写代码测试过吗? --------------------编程问答--------------------
你实际写代码测试过吗?
有测试过的哦,....在我的真机上测试的结果,每次比较短的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
--------------------编程问答-------------------- onFling不行的话用onScroll试过不?
补充:移动开发 , Android