单击按钮后如何设置其他动作

时间:2018-08-23 13:08:02

标签: java android android-button

我正在尝试设置一个按钮,该按钮以字符串形式编写莫尔斯电码。该按钮应类似于早期的摩尔斯电码机。如果您点击它,它会插入一个点,如果您按住它的时间更长(我认为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;
}
}

0 个答案:

没有答案