2

NumberPicker私は、ユーザーが 1 つの数字を選択するために使用する 3900 の数字の範囲を持っています。これで、ピッカーで上下の矢印を長押しすると、数字がゆっくりと増減します。私はsetOnLongPressUpdateInterval()0 ミリ秒に設定しましたが、この大きな数値範囲ではまだゆっくりと増加しています。

上下の矢印を長押しするとピッカーの増分を変更して、たとえば 100 ずつ数字を増やし、ボタンを放すと 1 の増分に戻すことは可能ですか?

4

1 に答える 1

3

長押しをトラップする作業が気になったので、この方法にしました。

NumberPicker _picker;
long _tsLastChange;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.number_picker);

    _picker = (NumberPicker) findViewById(R.id.picker);
    _picker.setMinValue(1);
    _picker.setMaxValue(3900);
    _picker.setOnLongPressUpdateInterval(100);

    _picker.setOnValueChangedListener(new OnValueChangeListener() {

        @Override
        public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
            Log.d("NumberPickerActivity", "value changed detected");
            long tsChange = System.currentTimeMillis();
            if (tsChange - _tsLastChange < 200)
            {
                if (newVal > oldVal)
                    _picker.setValue(newVal + 100);
                else 
                    _picker.setValue(newVal - 100);
            }
            _tsLastChange = tsChange;
        }
    });
}

これを IRL で機能させるには、おそらく (a) "newVal" を 100 程度に丸め、(b) 私よりもラップアラウンド ケースについて心配する必要があるでしょう。

私にとってやや驚くべきことは、プログラムsetValueonValueChangedListener.

NumberPicker「Theme.Black」テーマを使用して 4.1 エミュレーターでこれをテストし、+/- ボタンで「昔ながら」を取得しました。

于 2012-12-31T04:29:13.860 に答える