我正在创建一个按钮,当按一次并按住按钮时,该按钮会增加值。只要按住按钮,该值就会不断增加。有人告诉我使用onTouch代替onClick来执行此操作,但找不到正确的方法。下面的代码仅适用于按下一次。谢谢。
public class MainActivity extends AppCompatActivity {
int i = 0;
TextView textView;
Button button;
@SuppressLint("ClickableViewAccessibility")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=findViewById(R.id.button);
textView=findViewById(R.id.textView);
button.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP){
setText();
}
return true;
}
});
}//oncreate
public void setText(){
textView.setText(""+i);
i++;
}
}//class
答案 0 :(得分:2)
结合MotionEvent.ACTION_DOWN和计时器是关键。您将在降落时启动计时器d,然后在降落时取消计时器,
活动中:
//timer for increment
Timer fixedTimer = new Timer();
void initTimer() {
fixedTimer = new Timer();
}
注册计时器时:
btn.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
fixedTimer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
//increment here
}
}, DELAY,INTERVAL_PERIOD_FOR_INCREMENT);
}
else if (event.getAction() == MotionEvent.ACTION_UP)
{
//cancel timer
fixedTimer.cancel();
}
return false;
}
});
答案 1 :(得分:1)
您需要使用 MotionEvent.ACTION_DOWN 使用以下代码来获得正确的结果。
button.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN){
setText();
}
return true;
}
});
现在,当您按住该按钮时,它将增加该值,而在按下按钮时,它将不起作用。
希望这会有所帮助。
答案 2 :(得分:0)
将MotionEvent.ACTION_UP替换为
MotionEvent.ACTION_DOWN
按下按钮
mButton.setOnTouchListener(new OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
if (event.getAction() == MotionEvent.ACTION_DOWN)
Log.d("Pressed", "Button pressed");
else if (event.getAction() == MotionEvent.ACTION_UP)
Log.d("Released", "Button released");
// TODO Auto-generated method stub
return false;
}
});
答案 3 :(得分:0)
尝试此代码:
final CountDownTimer countDownTimer=new CountDownTimer(Long.MAX_VALUE,1000) {
@Override
public void onTick(long l) {
int i= Integer.parseInt(finalTxtView.getText().toString());
finalTxtView.setText(String.valueOf(++i));
}
@Override
public void onFinish() {
}
};
btnPresMe.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction()==MotionEvent.ACTION_DOWN)
{
countDownTimer.start();
}
if (motionEvent.getAction()==MotionEvent.ACTION_UP)
{
countDownTimer.cancel();
}
return false;
}
});
每按住1秒,它将增加一个值。您可以根据需要更改1000(1秒)。