我正在尝试设置一个按钮,该按钮以字符串形式编写莫尔斯电码。该按钮应类似于早期的摩尔斯电码机。如果您点击它,它会插入一个点,如果您按住它的时间更长(我认为onLongClick设置为500ms),它将插入一个破折号,并且如果没有被按下一段时间,则假定您输入了一个摩尔斯字母/符号。后一部分是我无法真正实现的东西。
当前,我正在尝试设置两个侦听器。一个使用onClick(),另一个使用onLongClick()。然后他们调用在我的莫尔斯弦上构建的方法,同时在textView中输出构建的字符串。按下按钮后,我有一个延迟计时器,该计时器应在一秒钟后检查是否按下了按钮,如果没有按下,则应在莫尔斯电码串中添加一个/,表示该字母已成功写入。这是我的代码(忽略onLongClick侦听器和addWordSpace方法,因为它们尚未实现)。问题是,当我模拟我的应用程序并且单击按钮一次以插入点后,即使我一秒钟不执行任何操作,也不会使用addLetterSpace方法插入/符号。
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.util.Timer;
import java.util.TimerTask;
public class MainActivity extends AppCompatActivity {
public Button buttonIn;
public TextView textOut;
public String morse;
private static boolean run = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonIn = findViewById(R.id.buttonIn);
textOut = findViewById(R.id.textOut);
morse = "";
buttonIn.setOnClickListener(new View.OnClickListener(){
public void onClick(View activity_main){
setDot();
final Timer delayTimer = new Timer();
final TimerTask delayTask = new TimerTask(){
@Override
public void run() {
if (run) {
if(!buttonIn.isPressed()){
addLetterSpace();
textOut.setText(morse);
}
} else {
delayTimer.cancel();
delayTimer.purge();
}
}
};
delayTimer.schedule(delayTask, 1000);
run = false;
textOut.setText(morse);
}
} );
//IGNORE THIS LISTENER.
buttonIn.setOnLongClickListener(new View.OnLongClickListener(){
public boolean onLongClick(View activity_main){
setDash();
Timer delayTimer = new Timer();
delayTimer.schedule(
new TimerTask(){
public void run(){
while(!buttonIn.isPressed()){
addLetterSpace();
textOut.setText(morse);
break;
}
}
},
1000);
delayTimer.cancel();
return true;
}
});
}
public String setDot(){
morse = morse + ".";
return morse;
}
public String setDash(){
morse = morse + "-";
return morse;
}
public String addLetterSpace(){
morse = morse + "/";
return morse;
}
public String addWordSpace(){
morse = morse + "%";
return morse;
}
}