2

私は FireMonkey を初めて使用します (Android で動作する新しい機能に惹かれました)。リストボックスのアニメーションで項目の選択をアニメーション化して、基になるコンテンツを明らかにしようとしています (頻繁なパターン)。ただし、リスト ボックスの非表示をアニメーション化するときに、リスト ボックスで以前に選択した項目の選択解除を管理するのに問題があります。奇妙なことに、これは Windows プラットフォームでのみ発生し、Android または iPad デバイス (または iPad シミュレーター) では発生しないようです。

問題を再現するには (RAD Studio XE5 で):

1) 新しい FireMonkey モバイル アプリケーションを作成し、開始レイアウトとして使用する Tablet Master-Detail を選択します。

2) [ターゲット プラットフォーム] を右クリックし、[32 ビット Windows ]を選択してデバッグを簡素化し、それを選択します。

3) 新しい TListBox オブジェクトを追加し、ウィンドウの左側にドロップします。

4) 構造ブラウザーを使用してそれを LeftLayout に移動し、その親を LeftLayout にします。

5) ListBox1 オブジェクトをクリックします。

6) LeftLayout を埋めるために、Align プロパティを alClient に変更します。

7) ObjectInspector で、Position プロパティと X Sub プロパティを選択し、Create New TFloatAnimation を選択します。FloatAnimation の名前は FloatAnimation1 になります

8) ListBox1 の新しい OnItemClick ハンドラーを作成し、次のコードを追加します。

FloatAnimation1.StartFromCurrent := True;
FloatAnimation1.StopValue :=  0 - ((LeftLayout.Width) / 1);
FloatAnimation1.Start;

9) 新しいボタンを作成し、左側のウィンドウの上部にあるツールバーに配置します

10) 新しいボタンのハンドラーを作成し、次のコードを追加します。

FloatAnimation1.StartFromCurrent := True;
FloatAnimation1.StopValue := 0;
FloatAnimation1.Start;

11) ListBox をダブルクリックしてアイテム デザイナを開き、AddItem ボタンを 3 回クリックして 3 つの TListBoxItems を追加します。

12) アプリを実行します。ListBox の 3 つの項目のいずれかをクリックします。ListBox はビューの外で左にアニメーション化されます。追加したボタンをクリックして元に戻します。他の項目をクリックすると、ListBox1 の MultiSelect がオフになっていても、最終的に 3 つの項目がすべて選択されます。

13) アプリを停止します。"1" を "2" に変更して、OnItemClick ハンドラー コードを変更します。これにより、ListBox は半分だけ左に移動します。アプリを再度実行します。ここで、ListBox をクリックすると、1 つの項目のみが選択され、以前に選択されていた項目は選択解除されます (単一選択リスト ボックスの場合と同様)。

繰り返しますが、これを iPad、iPad シミュレーター、または Android タブレットで実行すると、ListBox は適切に機能します。ListBox で項目をクリックすると、以前に選択した項目が選択解除されます。

この種のアニメーションはアプリで非常に一般的であるため、これを見つけたのは私が初めてではありません。ListBox の動作がおかしいのはなぜですか? また、Windows32 で画面の一部だけをアニメーション化した場合に異なるのはなぜですか? Windows32 と iPad や Android タブレットで異なるのはなぜですか?

4

1 に答える 1

0

私は同じ問題を抱えています.XE5 Update2を使用したWin32アプリ、リストボックスが左に移動してから戻ってきますが、青い選択の下敷きが残ります。

私にとってうまくいくのは(私が知っている非常に汚い)、アニメーションを開始した直後にタイマーを開始することです。タイマー間隔は100ms

コードインタイマー

if lb_liste.selected is TListBoxItem then
lb_liste.selected.isselected:= false;

//lb_liste は私のリストボックスです。これ以上アイテムが選択されていないことが問題になる可能性がありますが、それは私にとっては問題ありませんでした。以前は TFloatAnimation の OnProcess イベントにこの部分がありましたが、奇妙なことに、リストボックスに戻る前に別のフォームでデータベースと対話するたびに AV が発生しました。

私にとって、これは明らかに FMX のバグです。XE6、7、8 を待ちましょう。

于 2014-02-12T16:45:40.003 に答える