2012-02-29 105 views
0

我已经与一些子项实现了自定义视图。该视图可以使用标准拖动手势滚动。也可以点击每个孩子。问题是,当我开始拖动视图时,其中一个孩子变得“倒下”事件,并且它的状态将其状态更改为“按下”一秒钟。我更喜欢标准的listview行为 - 当用户用他/她的手指持续按这个孩子50ms时,孩子进入按下状态。这将减少误读新闻事件引起的眨眼。在自定义拖动/水龙头实现中闪烁

我知道,我需要至少2个事件来检测用户是否在点击或拖动视图。现在我正在使用TimerTask来处理'down'事件。当我在'down'事件执行前得到'move'事件时,我知道用户正在拖动,我可以取消sheduled事件。

我知道这很不方便。我还尝试使用gesturedetector来检测拖动和点击事件,但是当用户移动手指并开始拖动视图时,需要一些额外的工作来正确实现从按下更改视图状态到默认状态。

我的问题是 - 这是如何在android listview中实现?我试图从listview实现中复制他们的解决方案,但它太大了,我无法处理它。只是我没有看到负责处理这种情况的代码。

回答

0

我设法了解ListView中的手势检测逻辑,并且通常在Android视图中了解手势检测逻辑。我写了自己的手势探测器,比原来的探测器好一些。它报告更多的手势(多次点击,拖动),并有一些配置(超时,移动epsilon)。你可以在这里找到它开源:Better Gesture Detector on code.google

库使用Handler类和postDelayed()/ removeCallbacks()方法组合进行检测,处理和取消移动事件和手势。这非常简单,只需阅读代码即可获得想法。

此存储库还包含一个简单的演示。请注意,此代码按“原样”提供,包含一些无用的注释和日志,应予以清理。