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;
}
}
}