我正在构建的系统包括一组UI滑块(数量有所不同),每个滑块的比例为0-100。滑块是指一个用户界面,您可以在其中抓取一个元素并将其上下拖动,就像音量控件一样。它们通过一种算法进行连接,以确保它们始终总为100。因此,当一个滑块向上移动时,其他所有滑块都向下移动,最终变为零。当一个向下移动时,其他向上移动。在任何时候,总数必须为100。因此,此处的滑块具有不同的值,但总计为100%:
----O------ 40
O---------- 0
--O-------- 20
--O-------- 20
--O-------- 20
如果第一个滑块然后从40向上移动到70,则其他滑块的值必须向下移动(拖动滑块时)。请注意,三个滑块从20更改为10,一个滑块保持在零,因为它不能降低。
-------O--- 70
O---------- 0
-O--------- 10
-O--------- 10
-O--------- 10
当然,当任何滑块达到0或100时,它都无法进一步移动,这就是我的头部开始真正受伤的地方。因此,如果滑块向高处移动,则其他滑块向低处移动,但是当其中任何一个达到零时,只有尚未达到零的其余滑块才能向低处移动。
我在这里问这个问题,因为这个问题特定于算法而不是实现。FWIW该平台是Android Java,但这并不特别相关。
我第一次刺中的方法是计算移动的滑块的百分比变化。然后,我拆分该更改并将其(沿另一个方向)应用于其他滑块值。但是,问题在于,如果使用百分比乘以,如果任何滑块滑到零,就永远不会再从零开始增加-最终结果是各个滑块卡在零上。为了避免舍入问题,我使用了范围为0-1,000,000的滑块,这似乎很有用,但是我还没有创建一种能够很好地处理所有情况的算法。