使用NumberPicker的OnValueChangeListener接口来监测NumberPicker值的变化。在每次值变化时,更新其他NumberPicker的最大值和最小值,以确保它们的总和始终等于预设的总值。以下是一个示例实现:
public class MainActivity extends AppCompatActivity implements NumberPicker.OnValueChangeListener {
private NumberPicker np1, np2, np3;
private int totalValue = 100;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
np1 = findViewById(R.id.np1);
np2 = findViewById(R.id.np2);
np3 = findViewById(R.id.np3);
np1.setOnValueChangedListener(this);
np2.setOnValueChangedListener(this);
np3.setOnValueChangedListener(this);
np1.setMaxValue(totalValue);
np2.setMaxValue(totalValue - np1.getValue());
np3.setMaxValue(totalValue - np1.getValue() - np2.getValue());
}
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
int newTotal = newVal + np2.getValue() + np3.getValue();
int diff = totalValue - newTotal;
if (diff < 0) {
// The new value exceeds the total.
picker.setValue(oldVal);
return;
}
// Update the maximum values of the other NumberPickers.
switch (picker.getId()) {
case R.id.np1:
np2.setMaxValue(diff);
np3.setMaxValue(totalValue - newVal - np2.getValue());
break;
case R.id.np2:
np1.setMaxValue(diff + newVal);
np3.setMaxValue(totalValue - np1.getValue() - newVal);
break;
case R.id.np3:
np1.setMaxValue(diff + newVal + np2.getValue());
np2.setMaxValue(totalValue - np1.getValue() - newVal);
break;
}
}
}