按下按钮一次并保持增量值(连续)

时间:2018-07-17 06:39:45

标签: android button onclick ontouch

我正在创建一个按钮,当按一次按住按钮时,该按钮会增加值。只要按住按钮,该值就会不断增加。有人告诉我使用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

4 个答案:

答案 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秒)。