【发布时间】:2011-11-23 08:37:07
【问题描述】:
这几天我一直在纠结这个问题。我尝试在 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;
}
}
对于分辨率较低的设备,可能需要减小文本大小。
提前致谢!
【问题讨论】:
标签: java android button ontouchlistener