2017-07-18 19 views
2

私はスクロール可能なboxlayoutを持っている画面があります。これは、正常に動作し、私は、画面ScrollViewとタッチイベントが一緒にキビーで動作しない

#kvfile 
<FirstScreen>: 
    ScrollView: 
     BoxLayout: 
      orientation:"vertical" 
      size_hint_y: None 
      height: self.minimum_height 
      #here some scrollable labels, text inputs, and buttons 

#python file 
class FirstScreen(Screen): 
    ''' 
    initial = 0 
    def on_touch_down(self, touch): 
     self.initial = touch.x 

    def on_touch_up(self, touch): 
     if touch.x > self.initial: 
      # do something 
     elif touch.x < self.initial: 
      # do other thing 
     else: 
      # what happens if there is no move 
    ''' 
    pass 

の内側にラベル、テキスト入力やボタンをスクロールすることができます。しかし、私はタッチイベントを追加したときに、スクロールが無効になって左右のスワイプを検出します。今、私は左、右のスワイプを行うことはできますが、スクロールはできません。スクロールだけでなくスクロールも可能にする方法は?

答えて

1

このコードでevent bubblingを中断しています。レイアウトの子のon_touch_downメソッドはまったく呼び出されません。一般的には、常にTrueを返すか、イベント(またはその2つの組み合わせ)を渡す必要があります。

class FirstScreen(Screen): 
    initial = 0 
    def on_touch_down(self, touch): 
     self.initial = touch.x 
     return super(Screen, self).on_touch_down(touch) #pass the touch on 

    def on_touch_up(self, touch): 
     if touch.x > self.initial: 
      print "left" 
      return True #don't pass the touch on 
     elif touch.x < self.initial: 
      print "right" 
      return True 
     else: 
      print "no" 
      return super(Screen, self).on_touch_up(touch) 
+0

現在の解決策は部分的に機能しますが、部分的に機能します。私はこれを私のコンピュータで開発しています。マウスのスクロールボタンを使うとスクロールが機能するように見え、タッチでスクロールすることはできません。 – Eka

+0

は、タッチでスクロールしても意図せずに 'x'座標を変更していて、条件がキックインしてイベントを終了させるためである可能性があります。ユーザーが*スワイプまたはスクロールしたいときを区別するために何らかの方法が必要です。そして、 'return True'またはイベントを渡します。 (何とか矛盾しない場合は、いつでもイベントを通過することができます)。たとえば、スワイプの最小距離を 'if abs(touch.x - self.initial)> X' ...と設定することができます。 – KGS

+0

これは、スクロールに使用する条件です。' p =(touch.x- self.initial)/ self.initial'とし、左右のスワイプを検出するためのしきい値を追加しました。私はscrollviewが有効になっていると思うが、私のタッチイベントはscrollviewのタッチを上回っている。上下にスワイプしたときにスクロールビューのタッチを有効にする方法が必要です。私はそれをどうやって行うのか分かりません。私はこの 'p =(touch.y-self.initial)/ self.initial'を使ってスワイプを検出することができますが、スクロールタッチを有効にする方法は – Eka

関連する問題