2017-07-17 60 views
1

私はkivyアプリで、私の知識kivyにスワイプイベントを追加するには、このようなon_touch_leftや利用可能on_touch_rightなどのイベントを持っていないが、それは私がこの目的python kivy appで左右にスワイプする方法は?

class TestWidget(BoxLayout): 
    def on_touch_move(self, touch): 
     print touch.x 
のために使用することができると思う別の on_touch_move機能を持っています

私が上記のコードで気づいたのは、右にスワイプするとtouch.x値が増加し、右にスワイプするとtouch.x値が減少するということです。最初のと最後のtouch.x値の差をとって、左右のスワイプを予測するだけです。

問題は、touch.x値を最初から最後まで保存して検索する方法です。

+1

私はこの[質問](https://stackoverflow.com/questions/30934445/kivy-swiping-carousel-screenmanager)が類似しているとあなたを助けるかもしれないと思います。 – KelvinS

+0

受け入れられた答えはジェスチャーモジュールをインポートする必要があり、私はそのように行かない方がいいです。 – Eka

答えて

1

代わりon_touch_moveイベントを使用して、あなたはon_touch_downを使用してtouch.xを保存しon_touch_upを使用して、例えば、touch.xを比較することができます

initial = 0 
def on_touch_down(self, touch): 
    initial = touch.x 

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

より良い方法は何をする最小スワイプ範囲を設定するif touch.x - initial > some-valueを使用して比較することです何らかのアクション。

+0

それはすごい答えです、私はそれを考えなかった、ありがとう。私はこのクラスの中でこれを使用しているので、関数内で 'self.initial'でなければならない' initial'の小さな問題がありました。私はまたあなたの最後のアドバイスを取ったと私はそれをパーセンテージの代わりに違いを作ったとそれは驚くべきことだ – Eka

+0

ええ、私は 'self.initial'の部分を逃したが、私はうまくいって:) –

1

私はこれを計算するtouch.dxtouch.dy性質とともに on_touch_down を使用しています。その理由は、スワイプの長さを動的に計算する必要があるため、画像のアルファを決定するからです。非動的計算のために、私は萌えAのソリューションがより単純でリソース集約的ではないことを発見しました。

def on_touch_move(self, touch): 
     if self.enabled: 
      self.x_total += touch.dx 
      self.y_total += touch.dy 

      if abs(self.x_total) > abs(self.y_total): 
       "do something" 
      else: 
       "do something else" 
関連する問題