2011-11-18 9 views
13

Tengo un diseño que se muestra con un clic de botón. Quiero ocultar ese diseño después de 10 segundos.¿Ocultar un diseño después de 10 segundos en Android?

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    mVolHandler = new Handler(); 
    mVolRunnable = new Runnable() { 
     public void run() { 
      mVolLayout.setVisibility(View.GONE); 
     } 
    }; 
} 


private OnTouchListener mVolPlusOnTouchListener = new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     mVolLayout.setVisibility(View.VISIBLE); 
     mVolHandler.postDelayed(mVolRunnable, 10000); 
    } 
} 
+0

He intentado usar el controlador. Cuando hago clic en el botón se muestra el diseño y con el controlador se hace oculto después de 10 segundos. Pero el problema es que cuando continuamente hace clic en el botón va oculto .Si vuelve a hacer clic en el botón, se muestra el diseño, pero se oculta antes de 10 segundos. Quiero mostrar el diseño durante 10 segundos desde el último clic del usuario. – user987362

+0

¿Hay alguna otra solución? Por favor, ayúdenme – user987362

+0

Lo he intentado así – user987362

Respuesta

34

Hacer uso de Handler & Runnable.

Puede retrasar un Runnable usando postDelayed de Handler.

Runnable mRunnable; 
Handler mHandler=new Handler(); 

mRunnable=new Runnable() { 

      @Override 
      public void run() { 
       // TODO Auto-generated method stub 
       yourLayoutObject.setVisibility(View.INVISIBLE); //If you want just hide the View. But it will retain space occupied by the View. 
       yourLayoutObject.setVisibility(View.GONE); //This will remove the View. and free s the space occupied by the View  
      } 
     }; 

Ahora dentro evento onButtonClick usted tiene que decir Handler para ejecutar un ejecutable después de X segundos mili:

mHandler.postDelayed(mRunnable,10*1000); 

Si desea cancelar esto, entonces usted tiene que utilizar mHandler.removeCallbacks(mRunnable);

actualización (Según la pregunta editada) Solo necesita eliminar las devoluciones de llamada desde Handler usando removeCallbacks()

Así que actualizar el código dentro de onTouch método como este:

mVolLayout.setVisibility(View.VISIBLE); 
mVolHandler.removeCallbacks(mVolRunnable); 
mVolHandler.postDelayed(mVolRunnable, 10000); 
2

Puede utilizar un Animation comenzó cuando hace clic en el botón, con 10 segundos de duración que se desvanece a cabo el diseño y, probablemente, establece su visibilidad a GONE al final.

+0

+1 para proporcionando una buena solución. aunque usar un temporizador también servirá para el propósito ... hubiera sido útil si hubieras mostrado cómo se hace realmente. – ngesh

+1

Hacer que el diseño desaparezca simplemente no es elegante, es por eso que sugerí la animación. –

0

Utilice el controlador para ocultar el diseño después de 10 segundos. Uso del anuncio retrasó método

0
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    pd=ProgressDialog.show(this,"","Loading, Please wait .. ",true); 

    setTitle("set title"); 
    final Handler uiThreadCallback=new Handler(); 
    final Runnable runInUIThread= new Runnable(){ 
     public void run(){ 
      fnDraw(); 
      pd.dismiss(); 

     } 
    }; 
    new Thread(){ 
     @Override public void run(){ 
      uiThreadCallback.post(runInUIThread); 
     } 
    }.start(); 
} 
public void fnDraw(){ 
    setContentView(R.layout.define ur xml if any); 
    i1=(ImageView)findViewById(R.id.i1); 
    t1=(TextView)findViewById(R.id.t1); 
    t2=(TextView)findViewById(R.id.t2); 

    timerRegister=new Timer(); 
    lIteration=0; 
    checkTime=new TimerTask(){ 
     public void run(){ 
      if(lIteration==1){ 
       timerRegister.cancel(); 
       uiDrawThreadCallback.post(runInUIDrawThread); 
      } 
      lIteration++; 
      return; 
     } 
    }; 
    timerRegister.scheduleAtFixedRate(checkTime,0,10000); 
} 
final Handler uiDrawThreadCallback=new Handler(); 
final Runnable runInUIDrawThread= new Runnable(){ 
    @Override 
    public void run(){ 
     fnDrawAgain(); 
    } 
}; 
public void fnDrawAgain(){ 
    Intent intent=new Intent(this,new class you want to open.class); 
    startActivity(intent); 
} 

}

intentarlo estoy seguro de que va a funcionar en Ur de crear la pantalla

1

El siguiente fragmento de código esconde su diseño en 3 segundos. Puede cambiar la hora cambiando la constante que he proporcionado aquí para la demora.

  private void HideLayout() { 

    final View view=volume_control_layout; 
    view.postDelayed(new Runnable() { 

     public void run() { 
      if(!volume_controller.isPressed()) 
      { 
      view.setVisibility(View.INVISIBLE); 
      } 
      else 
      { 
       HideLayout(); 
      } 
     } 
    }, 3000); // (3000 == 3secs) 

    } 
0

Ninguno de los anteriores son buenas soluciones. Imagine que la vista no es visible después de 10 segundos (por ejemplo: se desplazó hacia abajo) para que Visibility.GONE no funcione en ella. Todavía estoy buscando soluciones

Cuestiones relacionadas