2016-03-22 20 views
3

Xamarinフォームでプログレスバーアニメーションを停止する最善の方法は何ですか?進捗状況は次のように開始されます:XamarinフォームProgressBar停止

animProgressBar = async() => { 
... 
await progressBar.ProgressTo (0, 10000, Easing.Linear); 
... 
}; 

アニメーションを停止して再起動します。私は、

のようなものを試してみました。

答えて

5

私はProgressToをキャンセルすることが可能であることがわからないんだけど、私は自分のアニメーションを作成する最も簡単な解決策であることとします:

new Button 
{ 
    Text = "Kick progress bar", 
    Command = new Command(() => 
    { 
     if (progressBar.AnimationIsRunning("SetProgress")) 
     { 
      progressBar.AbortAnimation("SetProgress"); 
     } 
     else 
     { 
      progressBar.Animate("SetProgress",(arg) => { progressBar.Progress = arg; }, 8*60, 8*1000, Easing.Linear); 
     } 
    }) 
} 

結果:

enter image description here 私は簡単な例を作りました

+0

それは本当にクールです、ありがとう。アニメーションをやっていたことを教えてくれませんか?私はそれらを見てきましたが、任意のヒントが評価されるでしょう。ありがとうございました – Vladtn

+0

確かに: "Animate"、 "AnimationIsRunning"、 "AbortAnimation"は、 "AnimationExtensions"クラスのメソッドです:https://developer.xamarin.com/api/type/Xamarin.Forms.AnimationExtensions/ –

+0

申し訳ありません。ビジュアルgif。どうやったの? – Vladtn

1

すべての進捗状況をリセットするようにprogressBar.Progress = 0を設定することをお勧めします。

Device.StartTimer(System.TimeSpan.FromMilliseconds(200),() => 
     { 
      myProgressBar.Progress += 0.01; 
      if (myProgressBar.Progress > .5) 
      { 
       myProgressBar.Progress = 0; 
       return false; 
      } 

      return true; 
     }); 
+0

Hmmm ...ありがとうございます。プログレスバーは と一緒に使用されるため、ハックのようです animProgressBar =非同期()=> { \t \t \t \t ... \t \t \t \tはprogressBar.ProgressTo(0、10000、Easing.Linear)を待ちます。 \t \t \t \t ... \t \t \t}; とにかくそのアニメーションをキャンセルしますか? – Vladtn

+0

myProgressBar.ProgressTo(0,1000、Easing.Linear)を待機します。最初のパラメータは、進行状況がアニメートされる値であり、2番目のパラメータはアニメーションの速度を表します。ですから、すぐに進捗をリセットするには、myProgressBar.ProgressTo(0、0、Easing.Linear)を待つことができます。 –

+0

アニメーションが終了していない場合は、System.InvalidOperationExceptionが発生します。他のアニメーションが終了していないため、「タスクが完了した時点でタスクを最終状態に移行しようとしました。 – Vladtn