android - 如何在按下按钮时重复做某事?

标签 android button touch-event ontouchlistener

我正在使用特定的中间件(不重要)在 Android 中开发电视遥控模拟器应用程序。

对于音量按钮(音量+ 和音量-),我要做的是在按下按钮时重复发送“提高音量”信号。

这就是我最后尝试的方法(其中一个按钮的代码,另一个必须相同,除了名称之外):

  1. 声明了一个 bool 变量

    boolean pressedUp = false;
    
  2. 使用以下 AsyncTask 声明了一个内部类:

    class SendVolumeUpTask extends AsyncTask<Void, Void, Void> {
    
        @Override
        protected Void doInBackground(Void... arg0) {
            while(pressedUp) {
                SendVolumeUpSignal();
        }
        return null;
    }
    

  3. 给按钮添加监听器:

    final Button buttonVolumeUp = (Button) findViewById(R.id.volup);
    buttonVolumeUp.setOnTouchListener(new View.OnTouchListener() {
    
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
    
            case MotionEvent.ACTION_DOWN:
    
                if(pressedUp == false){
                    pressedUp = true;
                    new SendVolumeUpTask().execute();
                }
    
            case MotionEvent.ACTION_UP:
    
                pressedUp = false;
    
        }
            return true;
        }
    });
    

我也尝试过使用简单的线程,如 Increment-Decrement counter while button is pressed但都没有用。该应用程序可以很好地处理其余按钮( channel 等),但完全忽略了音量变化。

最佳答案

您忘记添加一个中断;在 MotionEvent.ACTION_DOWN: 案例的末尾。这意味着行 pressedUp = false;即使在那个 Action 上也会被执行。正确的做法是:

@Override
public boolean onTouch(View v, MotionEvent event) {
    switch (event.getAction()) {

    case MotionEvent.ACTION_DOWN:

        if(pressedUp == false){
            pressedUp = true;
            new SendVolumeUpTask().execute();
        }
    break;
    case MotionEvent.ACTION_UP:

        pressedUp = false;

}
    return true;
}

关于android - 如何在按下按钮时重复做某事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13583742/

相关文章:

java - 将 ArrayList 从 Activity 传递到 CustomDialog

java - 如何在我的 jar eclipse 中引用第 3 方 jar

android - Material Design 没有样式化警报对话框

c# - 在提交按钮的 OnClientClick 事件上调用 javascript 函数

android - 返回上一页的按钮

javascript - 如何使按钮执行相同的代码但相应地具有不同的变量?

java - 如何根据用户的触摸移动图像?

android - onTouch 在 getX android 中给出奇怪的结果

android - onTouchevent() 与 onTouch()

android - 以编程方式通知用户有关可从 Google Play 商店获得的 android 自动更新 apk