funcion - Cómo configurar el retraso en la función onClick de Android
onclick javascript (5)
En lugar de quedarse dormido en el clic, puede publicar un mensaje retrasado en un manejador (con el ejecutable asociado) y actualizarlo la interfaz de usuario. Obviamente encaja esto en el diseño de tu aplicación y haz que funcione, pero la idea básica es esta:
//Here''s a runnable/handler combo
private Runnable mMyRunnable = new Runnable()
{
@Override
public void run()
{
//Change state here
}
};
Luego, desde onClick, usted publica un mensaje demorado a un controlador, especificando que ejecutable puede ejecutarse.
Handler myHandler = new Handler();
myHandler.postDelayed(mMyRunnable, 1000);//Message will be delivered in 1 second.
Dependiendo de lo complicado que sea tu juego, esto podría no ser exactamente lo que quieres, pero debería darte un comienzo.
) Estoy en el proceso de crear un juego de memoria. Mi problema es que cada vez que hago clic por segunda vez, ni siquiera puedo ver el botón de alternar. Para que quede claro: el primer clic alterna el botón de alternar, para que pueda ver el número que contiene, el segundo clic en un botón diferente se supone para activarlo, mostrarme el número y luego establecer una puntuación +1 si los números son los siguientes. igual, o revertirlos de nuevo si son diferentes.
A continuación se muestra el código que uso como mi función onClick, he estado pensando en poner algún tipo de función de espera o retardo en algún lugar del segundo "bloque if" - (if (klikniecia == 2)).
Cualquier ayuda en este tema sería apreciada.
public void onClick(View view) {
for (int i = 0; i < karta.length; i++){
if (view == karta[i]){
karta[i].setEnabled(false);
klikniecia++;
if (klikniecia == 1){
kartaID[0]=i;
kartaWartosc[0]=listaKart.get(i);
}
if (klikniecia == 2){
kartaID[1]=i;
kartaWartosc[1]=listaKart.get(i);
//i think, about setting a delay here, so i can see both of the cards, regardles if the''re the same or not before reverting them.
if (czyPara()){
karta[kartaID[0]].setEnabled(false);
karta[kartaID[1]].setEnabled(false);
klikniecia=0;
}
else{
karta[kartaID[0]].setEnabled(true);
karta[kartaID[0]].toggle();
karta[kartaID[1]].setEnabled(true);
karta[kartaID[1]].toggle();
klikniecia=0;
}
}
}
}
}
No duerma en el hilo de la interfaz de usuario. Necesita otro hilo que buscará un mensaje de "activación y espera" de su hilo de interfaz de usuario. Ese segundo hilo podría hacer que te escondieras después de una llamada de sueño normal. Luego, puede mantener el hilo para la próxima vez que necesite ocultar algo, o matarlo y preparar uno nuevo cada vez que necesite otro retraso.
Creo que hay algunas funciones "postFoo" que podrían ser útiles en este contexto (desencadenando eventos de IU desde fuera del subproceso de UI).
Nunca debe dormir en el subproceso de la IU (de forma predeterminada, todo el código se ejecuta en el subproceso de la IU): solo congelará la IU, no permitirá que algo cambie o termine. No puedo sugerir más porque no entiendo la lógica del código.
Trabajar correctamente:
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//Do something after 100ms
}
}, 100);
b.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
// TODO Auto-generated method stub
final ProgressDialog myPd_ring=ProgressDialog.show(MainActivity.this, "confident checker", "calculating please wait..", true);
myPd_ring.setCancelable(true);
new Thread(new Runnable() {
public void run() {
// TODO Auto-generated method stub
try
{
Thread.sleep(5000);
}
catch(Exception e){}
b.dismiss();
}
}).start();
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(), "today your confident level is 90% ",
Toast.LENGTH_LONG).show();
}
}, 5000);
}
});