Я парился над этим несколько дней. Я пытаюсь иметь селектор для большого диапазона чисел... в пределах int-limits. Вы должны удерживать кнопку, и значение должно меняться медленно, и чем дольше вы нажимаете, тем быстрее оно изменяется. Вы все знаете такую кнопку, не так ли?! :D Ввод числа должен быть точным, но быстрым. Я использую OnTouchListener
. Событие позволяет .getDownTime()
.
Я много пробовал, но всегда получалось только пропускать числа (не совсем, но слишком быстро для использования) или не многократно увеличивать значение, удерживая кнопку. Если запустить без изменений, то довольно быстро, но было бы неплохо, если бы он начал делать 10 100 или 1000-прыжков, если его удерживать достаточно долго.
Я подготовил небольшой SSCCE, выглядящий так:
public class ValueChangerSSCCE extends Activity implements OnTouchListener {
Button plusButton;
TextView valueView;
Button minusButton;
int value;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
plusButton = new Button(this);
plusButton.setText("+");
plusButton.setTextSize(120f);
plusButton.setOnTouchListener(this);
layout.addView(plusButton);
valueView = new TextView(this);
valueView.setGravity(Gravity.CENTER_HORIZONTAL);
valueView.setTextColor(Color.WHITE);
valueView.setText(value + "");
valueView.setTextSize(120f);
layout.addView(valueView);
minusButton = new Button(this);
minusButton.setText("-");
minusButton.setTextSize(120f);
minusButton.setOnTouchListener(this);
layout.addView(minusButton);
setContentView(layout);
}
/*
* Called when a button is pressed
*/
@Override
public boolean onTouch(View v, MotionEvent event) {
if (v == plusButton) {
value++;
} else if (v == minusButton) {
value--;
}
valueView.setText(value + "");
return false;
}
}
Для устройств с низким разрешением может потребоваться уменьшить размер текста.
Заранее спасибо!