我有Button
和TextView
。最初单击按钮i增加计数值并显示在TextView中。我以前使用的代码是。
buttonDayPlus.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
count = count + 1;
textView.setText(Integer.toString(count));
}
}
但是现在我想要的是如果用户按下了按钮,那么我想一个接一个地递增值并在textView
中显示增量值,并且一旦用户举起手......最终增量值显示在textView
中。所以如果有人知道帮助我解决这个问题
答案 0 :(得分:7)
您需要使用Handler对象,因为您必须实现一个单独的线程来递增/递减
public class MainActivity extends Activity {
private boolean autoIncrement = false;
private boolean autoDecrement = false;
private final long REPEAT_DELAY = 50;
private Handler repeatUpdateHandler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.input);
class RepetitiveUpdater implements Runnable {
@Override
public void run() {
if (autoIncrement) {
increment();
repeatUpdateHandler.postDelayed(new RepetitiveUpdater(), REPEAT_DELAY);
} else if (autoDecrement) {
decrement();
repeatUpdateHandler.postDelayed(new RepetitiveUpdater(), REPEAT_DELAY);
}
}
}
up.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
increment();
}
});
up.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
autoIncrement = true;
repeatUpdateHandler.post(new RepetitiveUpdater());
return false;
}
});
up.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP && autoIncrement) {
autoIncrement = false;
}
return false;
}
});
}
public void increment() {
if (i < 100) {
i++;
TextView no = (TextView) findViewById(R.id.no);
no.setText(String.valueOf(i));
}
}
}
为减量做同样的事。
礼貌:Github,作者:Jeffrey F. Cole
答案 1 :(得分:4)
我刚才在这里回答了这个问题 https://stackoverflow.com/a/41466381/2991628
我创建了一个CounterHandler
类来完成所有的计数和事件处理。这是它的工作原理。
new CounterHandler.Builder()
.incrementalView(buttonPlus)
.decrementalView(buttonMinus)
.minRange(-50) // cant go any less than -50
.maxRange(50) // cant go any further than 50
.isCycle(true) // 49,50,-50,-49 and so on
.counterDelay(200) // speed of counter
.counterStep(2) // steps e.g. 0,2,4,6...
.listener(this) // to listen counter results and show them in app
.build();
你可以从我的要点中找到这个课程 https://gist.github.com/nomanr/d142f4ccaf55ceba22e7f7122b55b9b6
答案 2 :(得分:2)
您应该使用OnTouchListener而不是OnClickListener。
但是,你的问题含糊不清。如果要在释放按钮时仅增加一次值,则可以执行以下操作:
button.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
count++;
}
}
};
如果您想在用户按住按钮时增加计数,您可以这样做:
button.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
count++;
myTextView.setText("Click count: "+count);
}
};
myTextView当然是textview,你想要显示点击次数。
答案 3 :(得分:0)
使用像这样的自定义触控器
public class CustomTouchListener implements View.OnTouchListener {
public boolean onTouch(View view, MotionEvent motionEvent) {
switch(motionEvent.getAction()){
case MotionEvent.ACTION_DOWN:
count = count + 1;
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
textView.setText(Integer.toString(count));
break;
}
return false;
}
}
并将这些监听器设置为您的按钮。可以帮到你。
答案 4 :(得分:0)
正如@shalini给出的答案是正确的,但根据您的要求,几乎没有变化
public class CustomTouchListener implements View.OnTouchListener {
public boolean onTouch(View view, MotionEvent motionEvent) {
switch(motionEvent.getAction()){
case MotionEvent.ACTION_DOWN:
count = count + 1;
textView.setText(Integer.toString(count));
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
break;
}
return false;
}
}