2016-09-12 10 views
1

私はパンジェスチャ認識器でいくつかのテストを行っています。セットアップはかなりシンプルですが、20x20のボックスビューがあり、相対レイアウトによって設定されています。パンジェスチャーXamarinパンジェスチャ認識器が正確な座標を与えていない

switch (args.StatusType) 
      { 
       case GestureStatus.Running: 
        box.TranslationX = box.X + args.TotalX; 
        box.TranslationY = box.Y + args.TotalY; 
        break; 
       case GestureStatus.Completed: 
        box.TranslationX = 0; 
        box.TranslationY = 0; 
        break; 
      } 

のハンドラは、だから、[OK]を実行しますが、私は、画面の周りBoxView内をドラッグしようとすると、それが適切な値を変換しません。また、ボックスを再描画しようとすると、この厄介な点滅の効果が得られます。これを行うより良い方法がありますか?点滅を取り除く方法はありますか?

+0

あなたはどのレイアウトを使用していますか? – nicks

+0

これは相対的なレイアウトです。 – Arthurdent510

+0

私はXamarin([パンジェスチャ認識機能の追加](https://developer.xamarin.com/guides/xamarin-forms/user-interface/gestures/pan/)の例を実装しましたが、同じ動作が発生します。私が動かそうとしている要素は、ジェスチャー中に点滅しています(実際には、ある位置から別の位置へとすばやく切り替わり、この「点滅」効果を引き起こします)。 –

答えて

1

問題を解決するのに役立つXamarinフォーラムの実装が見つかりました(Pinch and Pan gesture recognizers not working on Android project)。ここではパンの実装ですが、私は私のプロジェクトでそれをテストし、「点滅」の効果はもう存在していないことに気づい:

private double startScale, currentScale, xOffset, yOffset, startX, startY; 
... 
public void OnPanUpdated(object sender, PanUpdatedEventArgs e) 
{ 
    switch (e.StatusType) 
    { 
     case GestureStatus.Started: 
      startX = e.TotalX; 
      startY = e.TotalY; 
      Content.AnchorX = 0; 
      Content.AnchorY = 0; 
      break; 

     case GestureStatus.Running: 
      var maxTranslationX = Content.Scale * Content.Width - Content.Width; 
      Content.TranslationX = Math.Min(0, Math.Max(-maxTranslationX, xOffset + e.TotalX - startX)); 

      var maxTranslationY = Content.Scale * Content.Height - Content.Height; 
      Content.TranslationY = Math.Min(0, Math.Max(-maxTranslationY, yOffset + e.TotalY - startY)); 
      break; 

     case GestureStatus.Completed: 
      xOffset = Content.TranslationX; 
      yOffset = Content.TranslationY; 
      break; 
    } 
} 

は、このことができますなら、私に教えてください。

+0

お返事ありがとうございます!私はそれを今作業中ですが、maxTranslationは常に0に戻ってきます。var maxTranslationX = Content.Scale *のようなものに見えます。* Screen.Width - Content.Width?あなたはコンテンツの幅ではなく画面の幅をどこで使うのですか?それとも間違った方向に行くのですか? – Arthurdent510

関連する問題