我正在运行on_touch_down和on_touch_move,并且需要在完成移动或触摸完成时更新计数器。 但是当我们只是触摸移动时,我不想更新触摸。但默认情况下,即使它只是一个touch_move它仍然添加1触地,我认为这是因为在移动事件检测到第一次触地,但有什么办法解决这个问题:
以下是示例代码。
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
class JB(BoxLayout):
def __init__(self, **kwargs):
super(JB, self).__init__(**kwargs)
self.touch_move_count = 0
self.touch_down_count = 0
self.touch_move_Label = Label()
self.touch_down_Label = Label()
self.update_count()
self.add_widget(self.touch_down_Label)
self.add_widget(self.touch_move_Label)
def update_count(self):
self.touch_down_Label.text = "Touch Down Count : %s"%str(self.touch_down_count)
self.touch_move_Label.text = "Touch Move Count : %s"%str(self.touch_move_count)
def on_touch_down(self, touch):
self.touch_down_count += 1
print "down", self.touch_down_count
self.update_count()
def on_touch_move(self, touch):
self.touch_move_count += 1
print "moved", self.touch_move_count
self.update_count()
class MyJBApp(App):
def build(self):
self.parent = JB()
return self.parent
if __name__ == '__main__':
MyJBApp().run()
答案 0 :(得分:1)
在移动之前你仍然按下按钮 - 总是会发送一个降落事件,因为在那一刻,应用程序不知道你是否会移动。如果你想知道如果没有移动就发生了触摸,你也可以使用补漆:
def on_touch_down(self, touch):
self.is_touch_down = True
def on_touch_up(self, touch):
if self.is_touch_down:
self.touch_down_count += 1
print "down", self.touch_down_count
self.update_count()
self.is_touch_down = False
def on_touch_move(self, touch):
self.is_touch_down = False
self.touch_move_count += 1
print "moved", self.touch_move_count
self.update_count()
您还可以通过在on_touch_down
中保存已接收的触摸,然后在on_touch_up
中检查位置是否在某个容差范围内(例如4px或其他)来做更精细的事情。