作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用特定的中间件(不重要)在 Android 中开发电视遥控模拟器应用程序。
对于音量按钮(音量+ 和音量-),我要做的是在按下按钮时重复发送“提高音量”信号。
这就是我最后尝试的方法(其中一个按钮的代码,另一个必须相同,除了名称之外):
声明了一个 bool 变量
boolean pressedUp = false;
使用以下 AsyncTask 声明了一个内部类:
class SendVolumeUpTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... arg0) {
while(pressedUp) {
SendVolumeUpSignal();
}
return null;
}
给按钮添加监听器:
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/
我是一名优秀的程序员,十分优秀!