私が構築しているシステムには、0〜100のスケールを持つ一連のUIスライダー(数値は異なります)が含まれています。スライダーとは、ボリュームコントロールのように、要素をつかんで上下にドラッグするUIを意味します。それらは常に合計100になるようにアルゴリズムで接続されています。そのため、1つのスライダーが上に移動すると、他のスライダーはすべて下に移動し、最終的にゼロになります。1つが下に移動すると、他は上に移動します。常に合計は100でなければなりません。したがって、ここのスライダーにはさまざまな値がありますが、合計は100%です。
----O------ 40
O---------- 0
--O-------- 20
--O-------- 20
--O-------- 20
最初のスライダーが40から70に上に移動した場合、他のスライダーは値を下に移動する必要があります(スライダーをドラッグするときに)。3つのスライダーは20から10に変更され、1つは低くできないためゼロのままでした。
-------O--- 70
O---------- 0
-O--------- 10
-O--------- 10
-O--------- 10
もちろん、スライダーが0または100に達すると、それ以上移動できなくなります。これは、私の頭が実際に痛むところです。したがって、スライダーが高くなると、他のスライダーは低くなりますが、スライダーのいずれかがゼロに達すると、まだゼロに達していない残りのスライダーだけが低く移動できます。
この質問は実装ではなくアルゴリズムに固有なので、ここで私はこれを尋ねています。FWIWプラットフォームはAndroid Javaですが、特に関係はありません。
最初の刺し傷で行ったアプローチは、移動したスライダーの変化率を計算することでした。次に、その変更を分割し、それを(他の方向に)他のスライダーの値に適用しました。ただし、問題は、パーセンテージと乗算を使用することにより、いずれかのスライダーがゼロになった場合、ゼロから再び増加させることはできないということです。その結果、個々のスライダーがゼロで動かなくなります。丸めの問題を回避するために0〜1,000,000の範囲のスライダーを使用しましたが、これは役立つようですが、すべてのシナリオを適切に処理するアルゴリズムをまだ作成していません。