2017-03-13 20 views
0

xamarinフォームプロジェクトでアンドロイドのカスタムレンダラーでスワイプを左右に展開しています。 "DispatchTouchEvent(MotionEvent touch)"メソッドのオーバーライドを実装するクラスがあります。 MotionEventActions.Upが呼び出されると、私はいくつかのことを行います。 ListViewの共有コードに「ItemSelected」イベントを実装しましたが、リストビューの要素をスワイプすると、それがタップであると解釈され、このイベントがトリガーされます。リストビューとアイテム選択/タップのカスタムレンダラー

要素をタップまたはスワイプするとどう区別できますか?

私は "MotionEventActions.Up"でスワイプしても差異を考えていましたが、カスタムレンダラーから新しいページを表示する方法はわかりません。

これはレンダラーのコードです:

class SwipeListRenderer : ListViewRenderer 
{ 
    bool swipe = false; 
    bool scroll; 
    double puntoYinicial = 0.0; 

    public override bool DispatchTouchEvent(MotionEvent touch) 
    { 
     try 
     { 
      if (puntoYinicial == 0.0) 
       puntoYinicial = touch.GetY(); 

      double currentQuota = ((touch.GetX() - TouchDispatcher.StartingBiasX)/(double)this.Width); 
      float x = touch.GetX(); 
      float y = touch.GetY(); 
      SwipeList.SwipeItemView touchedElement = (TouchDispatcher.TouchingView as SwipeList.SwipeItemView); 
      switch (touch.ActionMasked) 
      { 

       case MotionEventActions.Down: 
        (this.Element as SwipeList.SwipeListView).RestoreItemPosition(); 

        swipe = false; 
        scroll = false; 

        return base.DispatchTouchEvent(touch); 
        break; 

       case MotionEventActions.Up: 
        if (swipe) 
         touchedElement.CompleteTranslation(currentQuota);  

        (this.Element as SwipeList.SwipeListView).AppendTouchedElement(touchedElement); 

        TouchDispatcher.TouchingView = null; 
        TouchDispatcher.StartingBiasX = 0; 
        TouchDispatcher.StartingBiasY = 0; 
        puntoYinicial = 0.0; 
        break; 
       case MotionEventActions.Move: 
        if (touchedElement != null) 
         TouchDispatcher.TouchingView.PerformTranslation(currentQuota); 

        break; 
      } 
      return base.DispatchTouchEvent(touch); 
     } 
     catch (Exception ex) 
     { 

      throw; 
     } 
    } 
} 

答えて

0

私は同様の問題があったし、これは私がそれを固定する方法です。 this stackoverflow質問の私の答えを見てください。この答えでは、コードビハインドコードで、TapGestureRecognizerの使い方を知ることができます。それが役に立てば幸い。

関連する問題