on_touch_down在on_touch_move时不应更新计数器 - kivy
我正在使用 on_touch_down 和 on_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()
1 个回答
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
中检查一下这个位置是否在某个容忍范围内(比如4像素之类的)。