2012-03-04 19 views
10

Tengo una superficie que ocupa toda la pantalla. Con solo hacer clic en un botón quiero que aparezca otro diseño (configuración tipo de cosa). Si comienzo con la superposición siendo visible, puedo hacer que sea invisible y luego visible de nuevo sin ningún problema. Pero si empiezo con esto invisible, no puedo volver a hacerlo visible nunca más. El código sigue:android setVisibility no se muestra si se configuró inicialmente como invisible

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

    <android.opengl.GLSurfaceView 
    android:id="@+id/glPlaySurface" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 
</android.opengl.GLSurfaceView> 

<RadioGroup 
    android:id="@+id/radioGroup1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:orientation="horizontal" > 

    <RadioButton 
     android:id="@+id/btnRotate" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="10dp" 
     android:checked="true" 
     android:text="R" 
     android:textColor="#000" /> 

    <RadioButton 
     android:id="@+id/btnPan" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="15dp" 
     android:text="P" 
     android:textColor="#000" /> 
</RadioGroup> 

<Button 
    android:id="@+id/btnLights" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_marginLeft="15dp" 
    android:layout_toRightOf="@+id/radioGroup1" 
    android:text="Lights" /> 

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/layoutLights" 
    android:layout_width="100dp" 
    android:layout_height="100dp" 
    android:visibility="visible" <--- Does not work if set to invisible 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentRight="true" 

    android:background="#fff" > 

    <Button 
    android:id="@+id/btnLightsOK" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:layout_marginLeft="15dp" 
    android:text="OK" /> 

    <Button 
    android:id="@+id/btnLights" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:layout_marginLeft="15dp" 
    android:text="OK" /> 

</RelativeLayout> 

</RelativeLayout> 


private OnClickListener mOnLightsClick = new OnClickListener() { 
    public void onClick(View arg0) { 
     if(mLayoutLights.getVisibility() == View.VISIBLE) { 
      mLayoutLights.setVisibility(View.INVISIBLE); 
     } 
     else { 
      mLayoutLights.setVisibility(View.VISIBLE); 
     } 
    } 
}; 
+0

el problema está relacionado con la superficie de gráficos. Si reemplazo el Glsurface con una vista superficial ordinaria, funciona bien. – user1248322

+0

más información: si configuro glsurface en GONE, establezco el diseño en VISIBLE y luego configuro la superficie gráfica en VISIBLE. Funciona. Pero ... si configuro glsurface en INVISIBLE en lugar de GONE, no funciona. – user1248322

+0

ok - surface_view_overlay en las demostraciones api hace exactamente lo que estoy buscando - voy a ver dónde me salió mal y luego publico. – user1248322

Respuesta

10

que tenemos. Debe establecer la visibilidad de todos los elementos en el diseño, no solo el diseño. Lo que este código trabajado:

if (mLayoutLights.getVisibility() == View.VISIBLE) { 
    ((Button) findViewById(R.id.btnLightsOK)).setVisibility(View.GONE); 
((Button) findViewById(R.id.btnLightsCnc)).setVisibility(View.GONE); 
mLayoutLights.setVisibility(View.GONE); 
} else { 
    mLayoutLights.setVisibility(View.VISIBLE); 
((Button) findViewById(R.id.btnLightsOK)).setVisibility(View.VISIBLE); 
((Button) findViewById(R.id.btnLightsCnc)).setVisibility(View.VISIBLE); 
} 
+1

Gracias, hombre, tuve el mismo problema. – Enrichman

1

Sugiero probar tres cosas independientes.

  1. Cambiando el ancho y el alto de la disposición para ajustar el contenido, ya que podría ser un problema que coincida con el elemento principal.
  2. Calling BringToFront en la vista
  3. Envolver la SurfaceView en un FrameLayout (esto está relacionado con # 2, pero todavía podría ayudar)
+0

Gracias, pero ninguno de ellos marcó la diferencia. – user1248322

+0

¿Sabes si el hilo de renderización se está ejecutando o incluso está comenzando en la superficie? – BeatingToADifferentRobot

+0

sí - el 3d responde al toque y se renderiza correctamente (he intentado renderizar de forma continua y renderizar cuando está sucio - no hay diferencia) – user1248322

-3
case R.id.title_call_button: 
if(llButtonCallNow.getVisibility() != View.VISIBLE){ 
llButtonCallNow.setVisibility(View.VISIBLE); 
} 
    else{ 
    llButtonCallNow.setVisibility(View.GONE); 
    Toast.makeText(getBaseContext(), ("Im here baby :)"), 
    Toast.LENGTH_SHORT).show(); 

    } 
break; 
14

Had error similar pero era debido a mi error tonto de no utilizar la UiThread.

Activity act = (Activity)context; 
act.runOnUiThread(new Runnable(){ 
@Override 
public void run() { 
    mLayoutLights.setVisibility(View.VISIBLE); 
} }); 
+1

Gracias hombre, ¡resolvió mi problema! Estaba configurando la visibilidad en una devolución de llamada, y no tenía idea de por qué la vista no se actualizó de inmediato, pero ahora funciona. Parece que tengo que trabajar en los hilos de UI ... – Jack

2

En mi caso, con un SurfaceView sencillo, basta poner la vista de IDO en XML, no invisibles. Entonces puedo configurar VISIBILIDAD correctamente después de eso.

+0

¡Esto resolvió mi problema! ¡Gracias! :) – acegs

-2

Simplemente configure el ancho y el alto de las propiedades como "fill_parent" en lugar de "match_parent". No es necesario establecer la visibilidad para todos los elementos secundarios, sino solo para el contenedor/elemento de nivel superior.

Cuestiones relacionadas