android setVisibility ne s'affiche pas si initialement invisible
J'ai un glsurface occupant la totalité de l'écran. Au clic d'un bouton, je veux une autre mise en page (paramètres de type de chose). Si je commence avec la superposition d'être visible, je peux la rendre invisible, puis de nouveau visible sans problème. Mais si je commence avec l'invisible, je ne peux pas le rendre toujours visible à nouveau. Code suit:
<?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);
}
}
};
le problème est lié à la glsurface. Si je remplace l'glsurface avec un ordinaire surfaceview, il fonctionne très bien.
plus d'infos: si j'ai mis le glsurface à DISPARU, le jeu de la mise en page VISIBLE, puis définissez la glsurface retour au VISIBLE, il fonctionne. Mais... si j'ai mis le glsurface INVISIBLE au lieu d'ALLÉ - il ne fonctionne pas.
ok - le surface_view_overlay dans l'api démos fait exactement ce que je suis à la recherche pour - je vais voir où je suis allé mal et puis après.
exécuter définir la visibilité sur le Thread de l'INTERFACE utilisateur 🙂
plus d'infos: si j'ai mis le glsurface à DISPARU, le jeu de la mise en page VISIBLE, puis définissez la glsurface retour au VISIBLE, il fonctionne. Mais... si j'ai mis le glsurface INVISIBLE au lieu d'ALLÉ - il ne fonctionne pas.
ok - le surface_view_overlay dans l'api démos fait exactement ce que je suis à la recherche pour - je vais voir où je suis allé mal et puis après.
exécuter définir la visibilité sur le Thread de l'INTERFACE utilisateur 🙂
OriginalL'auteur user1248322 | 2012-03-04
Vous devez vous connecter pour publier un commentaire.
Eu la même erreur, mais c'était à cause de mon stupide erreur de ne pas utiliser l'UiThread.
OriginalL'auteur Martin Sykes
L'a obtenu. Vous devez définir la visibilité de tous les éléments de la structure, et pas seulement la mise en page. Si ce code a fonctionné:
OriginalL'auteur user1248322
Dans mon cas, avec un simple SurfaceView, je viens de mettre la Vue à DISPARU en xml, pas INVISIBLE. Ensuite, je peux définir la VISIBILITÉ correctement par la suite.
C'est vraiment une très belle réponse
OriginalL'auteur Thomas
Je vous suggérons d'essayer les trois choses.
Savez-vous si le thread de rendu est en cours d'exécution ou même de commencer à la surface?
oui - 3d répond au toucher et affiche correctement (j'ai essayé les deux, de rendre en continu et rendu lors de la sale - pas de différence)
Je veux dire, plus précisément, dans le cas quand il commence invisible. Il semblerait que le moteur de rendu n'est pas en cours d'exécution lorsque vous démarrez invisible. Est-il toujours en cours?
oui, c'est la 3d répond et s'affiche correctement lorsque l'autre mise en page est visible ou invisible.
OriginalL'auteur BeatingToADifferentRobot
si vous définissez la CalendarView à la visibilité "VISIBLE" et dans le inflateView/OnCreateView après vous retrouver avec "findById" mise à "DISPARU" et vous pouvez faire ce que vous voulez avec elle.
OriginalL'auteur Idan Damri
OriginalL'auteur Faakhir