0

CListCtrlは約100,000以上のエントリを持っています。ユーザーには、これらのエントリを検索するための検索ボックスが表示されます。一致するものが見つかったら、それを選択範囲として設定し、 を使用してスクロールしEnsureVisibleます。

このスクロールは瞬時に行われます。私は、ここでデモされているものに似たアニメーション(特に「Go Top - Easing 2」アニメーション) をコーディングしてみたかったのです。

私は、基本的なアニメーションについて、

  1. 現在の選択を取得します。
  2. ターゲット選択を取得します。
  3. 差を計算します。
  4. 1 つのアイテムのピクセルの高さを取得します。
  5. 手順 3 と 4 の結果を乗算します。
  6. Scroll増分 = ステップ 5 の結果になるまでの遅延を伴う 1 (または他のより最適な値) の増分。

私はこれを試しましたが、信じられないほど混乱しました。まず、私のアルゴリズムは大丈夫ですか?第二に、これを達成するための別のより良い方法はありますか (できれば上記のリンクのアニメーション 2 に似ています)。

4

1 に答える 1

1

あなたのアルゴリズムは、単純な線形スクロールには問題ないようです。ただし、リンクはさまざまなイージング関数を使用してスクロールを指しています。

イージング関数は毎回同じ量だけスクロールするわけではありませんが、増加または減少は、加速または減速しているように見えるようにするためです。

イージング値を計算する一般的な方法は、正弦の結果を使用することです。正弦波を想像して、一度に 1 つのピクセルしか見えないと想像すると、波が進行するにつれて、ピクセルは極値で「緩和」し、中間の値で加速します。

あなたのイージング 2 アニメーションは、最初と最後に少しバウンスを追加しているだけです。これは、両端で極値を過ぎた少しの正弦波を使用することで簡単に実現できます。例えば。

     _
    / \
   /
\_/

コードが必要な場合は、C# で同様の質問に回答しました。

于 2013-04-19T19:21:04.227 に答える