Boa tarde,
Estou com o seguinte o problema, estou desennvolvendo uma aplicação que serve de controle, o mesmo envia comandos para o arduino, enquanto eu estiver segurando um botao quero que o led fique aceso, quando soltar o mesmo quero que apague,
// Não sei se essa função está certa
btn1.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(btn1.isClickable()){
dadosParaEnvio = "e";
EnviarDados(dadosParaEnvio);
}else if(btn1.isClickable() != true){ // Condição para apagar o led
dadosParaEnvio = "j";
EnviarDados(dadosParaEnvio);
}
return false;
}
});
Boa tarde,obrigado pela resposta,mas ainda não funcionou do jeito esperado,quando mante-se pressionado ficava acesso e ao soltar apagava, mas pelo novo método que mencionou ao segurar ele acende e apaga rapidamente.
Tentei da seguinte forma…
Pessoal, a ideia é usar o onTouchListener comparando o MotionEvent mesmo. No entanto, isso não é o suficiente. Na realidade, o código é um pouco mais complicado que isso.
Temos três MotionEvents principais: down, up e move, o grande problema é que o down é disparado apenas uma vez quando o dedo toca o button pela primeira vez. Por isso que fazer um if só fará seu código ser disparado uma única vez.
Então, uma ideia seria fazer um while, porém não teríamos como controlar a condição de parada desse laço, fazendo nossa app ficar num comportamento parecido com loop infinito. Então, um jeito que funciona seria fazer um controlador como filho de uma AsyncTask e aproveitar o cancel dessa classe para conseguirmos matar esse “loop infinito”.
Como essa AsyncTask só faz sentido para esse botão, deixei-a como uma classe interna, obtendo o seguinte código:
Ola,muito obrigado pela resposta,ela funcionou “quase perfeitamente”,apertando o botao e soltando rapidamente, o LED acendia com 100% de sua luminosidade e apagava com o tempo exato,mas porem, quando pressionado por um tempo a assim solto,o LED meio que demorava um pouco para se apagar.
Consegui meio que parcialmente resolver isso,quando apertava e soltava,ele acendia e apagava com tempos exatos, mesmo se fosse pressionado por um um tempo e solto ainda assim apagava no mesmo tempo que solto o botão,mas porem o LED não esta com 100% de sua luminosidade, quando o botão esta pressionado, parece que o LED esta acendendo e apagando numa velocidade grande,assim da a impressão de a luminosidade do LED estar fraca.
Aki esta o codigo que cheguei a esse ponto.
btn1.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, final MotionEvent motionEvent) {
dadosParaEnvio = "e";
EnviarDados(dadosParaEnvio);
return false;
}
});
Ola, gostaria de reaver essa questão , o método acima que mostrei parece que so funciona corretamente em tablets.
O seu método que propôs ate funcionaria, mas porem, quando solto o botão ele demora para cancelar a ação alem de que o metodo protected void onCancelled() dentro de ControleDoLed nao executa quando solto o botao.
Se puder der alguma dica para o meu problema agradeceria.