2011-04-08 120 views
2

万一我的标题是不够清楚,我会详细解释一下:滑过屏幕的手指激活按钮,就好像它们进行加压

说我们有充满多个按钮(10+)的屏幕,我们按下一个,激活onTouch/onClick。如果我们现在移动手指而不提起它,我希望它激活滑过的任何其他按钮。在这种特殊情况下,当您滑过虚拟钢琴时,我希望播放声音。

我知道onTouchListener解决方案,您在其中注册每个ACTION_MOVE并找到一些激活新事件的边界,但如果您有多个按钮并且希望允许平滑无障碍滑动,那么这远非最佳。

我也看过this thread,这表明我们将视图的touchListener和活动中的gesturelistener结合起来,但是再一次,这对我的情况并没有什么最佳的感觉。

我还没有尝试将touchlistener与gesturelistener结合起来,但我会继续前进,如果有人告诉我他们没有其他方式这样做。

回答

1

我居然把“易”的方式,并在使用ACTION_DOWNACTION_MOVE与坐标计算与event.getX()组合和event.getY()让我来检测当前哪个按钮被用于徘徊与onTouch法按钮。它有13个按钮,无滞后。

+0

请您详细说明您如何使用onTouch方法?我正在尝试实现类似的功能,onTouch可以识别我触摸的第一个视图,即使我将手指滑过其他视图。 – Phat7 2013-08-26 12:16:24

+0

@ Phat7由于我的按钮填充了显示,我使用显示大小来获得按钮的宽度和高度。然后我使用'event.getX()'和'event.getY()'来推断当前哪个按钮被悬停。我从来没有尝试过使用实际的按钮检测,我只是用坐标计算来完成它。请注意,这种行为可能不应该使用按钮。 – keyser 2013-08-26 12:22:56

4

在我看来,这样做的正确方法是忘记按钮,并创建一个绘制整个键盘的自定义视图。在这个视图中,你可以按你喜欢的方式处理触摸事件。你甚至不需要手势检测器,只是分析动作事件的动作和坐标,这很容易。

我不明白你的意思是关于ACTION_MOVE和延误。为了最小化延迟,请在ACTION_DOWN上作出反应,如果在处于停机状态时悬停其他键,则在ACTION_MOVE上作出反应。它不能比这更快。使用按钮有一个重要的延迟,因为onClick()事件在用户提起手指时触发,ACTION_UP。

按钮并不意味着按照您的描述工作。这个想法是,如果用户点击一个按钮,然后同时移开他的手指,它不会触发其他视图周围的onClick事件。这可以防止虚假点击。

+0

我的意思是延迟检查当前的坐标是否在一个新的视图内(我认为这是该方法的工作原理)。在这个自定义视图中,是否容易拥有单独的组件? (我正在考虑这样的事实,即我希望UI通过在按下/不按下按钮之间切换图像来显示“按钮”被按下)。谢谢回答! – keyser 2011-04-08 18:42:21

+0

如果您的意思是通过比较坐标和关键边界所导致的延迟,那么它就是epsilon。是的,我认为你可以拥有自定义视图子类LinearLayout,并在其中放置一些图像视图。然后,您可以使用ImageView.setImageLevel()轻松切换各个图像可绘制对象。 – olivierg 2011-04-08 18:59:19

+0

听起来很完美。我会继续尝试。我会报告回来,因为我知道有很多人想知道这件事(我想我因为我的重复问题而陷入低估,但我认为我可以比一些人更好地表达自己)... – keyser 2011-04-11 07:12:36

相关问题