IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants graphiques Android Discussion :

Définir la taille d'un GLSurfaceView


Sujet :

Composants graphiques Android

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 57
    Par défaut Définir la taille d'un GLSurfaceView
    Hello,
    Je souhaite définir la taille d'un glSurfaceView.
    Le taille s'adapte automatiquement en fonction de la place qui reste !
    Je veux que ca reste fixe.
    Comment faire ?

    Mon layout :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <android.opengl.GLSurfaceView android:id="@+id/surfaceViewJeux" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="wrap_content"></android.opengl.GLSurfaceView>

    merci

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 322
    Par défaut
    Bonjour,
    Pour obtenir une taille fixe il ne faut pas utiliser fill_parent et wrap_content sur les attributs layout_width et layout_height, mais plutôt des valeurs numériques (ex : 120dip).

    J'espère que ça t'aidera

  3. #3
    Membre chevronné
    Avatar de ZouBi
    Inscrit en
    Octobre 2007
    Messages
    508
    Détails du profil
    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 508
    Par défaut
    Si tu utilises l'unité "dp"; la taille sera en effet fixe sur un même écran en pixels; mais sur un écran d'une autre taille; celle-ci sera différente.
    Je ne sais pas comment tu veux voir les choses; mais dans ce dernier cas, si ça te gêne, utilises l'unité des pixels.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    android:layout_width="128px"

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 57
    Par défaut
    Hello

    Je veux que la hauteur soit égal à la largeur donc il faut que ca s'adapte à n'importe quelle résolution.
    Je pense qu'il faut le gérer en dynamique !
    Comment fait on ?

    Merci

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 322
    Par défaut
    Bonjour,
    Au début de ton application tu n'as qu'à récupérer ton LinearLayout global, puis tu regardes sa hauteur (getHeight) et sa largeur (getWidth). Avec ces deux valeurs tu pourras normalement ajuster la taille de ton image pour qu'elle soit carré

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 57
    Par défaut view height
    Hello,
    Je veux mettre la hauteur de ma vue à la largeur de la vue ou de l'écran:
    J'ai essayé avec view.layout(0, 0, _width, _width); et
    view.measure(_width, _width);
    mais ca ne marche pas !
    Comment faire ?
    Voici mon code :

    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    public class Jeux extends Activity {
    	MyRenderer    renderer;
    	GLSurfaceView view;
    	int _width;
    	int _height;
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {		
    		super.onCreate(savedInstanceState);
            this.requestWindowFeature(Window.FEATURE_NO_TITLE);
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);      
            Display display = ((WindowManager)     
            getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
            _width = display.getWidth(); 
            _height = display.getHeight(); 
            setContentView(R.layout.jeux);
            view = (GLSurfaceView) findViewById(R.id.surfaceViewJeux);
     
            //view.layout(0, 0, _width, _width);
            view.measure(_width, _width);
     
            renderer = new MyRenderer();
     
            view.setRenderer(renderer);
    }

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 322
    Par défaut
    Est ce que tu ne devrais pas changer la taille de ta vue dans la méthode onSurfaceChanged de ton Renderer ?

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 57
    Par défaut
    La taille de mon surfaceGlview s'adapte automatiquement en fonction de la place qui reste !
    Moi je veux la fixer pour que la largeur soit égal à la hauteur du surfaceView

    Comment veux tu faire cela ?
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    			public void onSurfaceChanged(GL10 gl, int width, int height) {
     
    				float ratio = (float) width / height;
    		        gl.glViewport(0, 0, width, height);	        
    		        gl.glMatrixMode(GL10.GL_PROJECTION);
    		        gl.glLoadIdentity();
    		        gl.glFrustumf(-width, width, -height, height, 1, 10);
    			}

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 57
    Par défaut
    setContentView(R.layout.jeux);
    view = (GLSurfaceView) findViewById(R.id.surfaceViewJeux);

    il faufrait un :
    view.SetHeight(width);
    mais cela n'existe pas

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 57
    Par défaut
    Hello,
    Lorsque je fixe glsurfaceview width à 400px cela ne marche pas !
    Pourquoi ?

    Voici le code :

    merci de votre réponse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" android:orientation="vertical">
        <LinearLayout android:layout_width="fill_parent"  android:layout_height="wrap_content" android:orientation="horizontal">
        	<Button android:layout_width="wrap_content" android:text="Menu" android:id="@+id/buttonMenu" android:layout_height="wrap_content"></Button>
        	<Button android:layout_width="wrap_content" android:text="Voir image" android:id="@+id/buttonVoirImage" android:layout_height="wrap_content" android:layout_gravity="left"></Button>
        	<Button android:text="Scores" android:id="@+id/buttonScores" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal"></Button>
        </LinearLayout>
    	<LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content">
    		<ImageView android:layout_width="wrap_content" android:src="@drawable/icon" android:layout_height="wrap_content" android:id="@+id/imageViewLogo"></ImageView>
    		<TextView android:id="@+id/textViewTitre" android:layout_width="fill_parent" android:text="MemoKron" android:textSize="30px" android:layout_height="wrap_content" android:gravity="right"></TextView>
    	</LinearLayout>
        <android.opengl.GLSurfaceView  android:id="@+id/surfaceViewJeux" android:layout_width="fill_parent" android:layout_height="400px"></android.opengl.GLSurfaceView>
        <LinearLayout android:layout_width="fill_parent"  android:layout_height="wrap_content" android:orientation="horizontal">
        	<TextView android:text="Niveau : 1 sur 50  " android:id="@+id/textViewNiveau" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
        	<TextView android:text="Mouvement : 8  " android:id="@+id/textViewMouvement" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
        	<TextView android:text="Temps : " android:id="@+id/textViewTemps" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
        	<Chronometer android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/chrono"/>
        </LinearLayout>
    </LinearLayout>

  11. #11
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 322
    Par défaut
    Bonjour,
    j'ai copié ton code xml dans un fichier test que j'ai visualisé sur éclipse et cela fonctionne. Après 400 pixel c'est beaucoup, essaye avec 200 tu verras que ta surface prend moins de place et que l'on voit le Linear d'en dessous.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 57
    Par défaut
    Hello
    oui cela fonctionne, j'avais mal testé !
    Désolé !
    Mais je ne comprends pas, j'ai mis à 320 pixels le height pour avoir un rendu carré qui prend toute la largeur de l'écran. Pourquoi 320px car la largeur de mon écran ne fait pas 320px. Et cela marche avec plusieurs émulateur de différentes résolutions. Pourquoi ca marche avec une taille fixe qui n'est pas la bonne en théorie ?

    Merci

    Cordialement

  13. #13
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 322
    Par défaut
    Bonjour,
    je ne comprends pas trop ce que tu veux dire.
    Tu as mis l'attribut Height à 320 px, tu obtiens un rendu carré alors que la largeur ne fait pas 320 px, c'est ça ?
    Combien de pixel fait ta largeur ?

    Pourquoi ca marche avec une taille fixe qui n'est pas la bonne en théorie ?
    Tu as fais un affichage de la largeur pour vérifier que le nombre de pixels est différent ?

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 57
    Par défaut
    C'est bon ca marche avec la hauteur fixe ! Il y a eu un petit raté quand j'ai changé d'émulateur.
    Comment fait on pour changer dynamiquement la hauteur d'un glsurfaceview ?

    Merci

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 57
    Par défaut
    Comment fait on pour changer dynamiquement la hauteur d'un glsurfaceview ?
    Ca doit pas être compliqué quand même ?
    merci

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 57
    Par défaut
    J'ai utiliser ceci en dehors de
    onCreate(Bundle savedInstanceState) { } de l'activité

    view.layout(0, view.getTop(), _width, _width + view.getTop());

    Je pense qu'il faut le mettre dans l'update de l'activité
    Quelle méthode il faut utiliser pour l'update de l'activité ?

    Le problème est que ca ne pousse pas le layout situé après le glsurfaceview
    !

    Peut-être qu'il y a une autre méthode pour changer dynamiquement la taille d'un glsurfaceView ?

    Merci

  17. #17
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 322
    Par défaut
    Bonjour,
    Il me semble que dans l'objet LayoutParams il y a la hauteur et la largeur. Tu récupères le LayoutParams de ta surface. Tu changes les valeurs que tu souhaites et tu lui renvoies

  18. #18
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    Quand on veut modifier dynamiquement l'IHM, le mieux reste de supprimer les vues dans le layout et ensuite de les rajouter (le redimensionnement se fera tout seul) .

    Attention si vous voulez supprimer les views contenu dans un layout utiliser RemoveAllViewInLayout().

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 57
    Par défaut
    Hello,
    J'ai essayé LayoutParams comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
         view = (GLSurfaceView) findViewById(R.id.surfaceViewJeux);
            view.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
    Mais j'ai l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    06-28 17:19:04.069: ERROR/AndroidRuntime(200): java.lang.ClassCastException: android.view.ViewGroup$LayoutParams
    06-28 17:19:04.069: ERROR/AndroidRuntime(200):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:326)
    06-28 17:19:04.069: ERROR/AndroidRuntime(200):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:278)
    06-28 17:19:04.069: ERROR/AndroidRuntime(200):     at android.view.View.measure(View.java:7703)
    06-28 17:19:04.069: ERROR/AndroidRuntime(200):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:2989)
    06-28 17:19:04.069: ERROR/AndroidRuntime(200):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
    06-28 17:19:04.069: ERROR/AndroidRuntime(200):     at android.view.View.measure(View.java:7703)
    06-28 17:19:04.069: ERROR/AndroidRuntime(200):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:2989)
    06-28 17:19:04.069: ERROR/AndroidRuntime(200):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
    06-28 17:19:04.069: ERROR/AndroidRuntime(200):     at android.view.View.measure(View.java:7703)
    06-28 17:19:04.069: ERROR/AndroidRuntime(200):     at android.view.ViewRoot.performTraversals(ViewRoot.java:747)
    06-28 17:19:04.069: ERROR/AndroidRuntime(200):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1613)
    06-28 17:19:04.069: ERROR/AndroidRuntime(200):     at android.os.Handler.dispatchMessage(Handler.java:99)
    06-28 17:19:04.069: ERROR/AndroidRuntime(200):     at android.os.Looper.loop(Looper.java:123)
    06-28 17:19:04.069: ERROR/AndroidRuntime(200):     at android.app.ActivityThread.main(ActivityThread.java:4203)
    06-28 17:19:04.069: ERROR/AndroidRuntime(200):     at java.lang.reflect.Method.invokeNative(Native Method)
    06-28 17:19:04.069: ERROR/AndroidRuntime(200):     at java.lang.reflect.Method.invoke(Method.java:521)
    06-28 17:19:04.069: ERROR/AndroidRuntime(200):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
    06-28 17:19:04.069: ERROR/AndroidRuntime(200):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
    06-28 17:19:04.069: ERROR/AndroidRuntime(200):     at dalvik.system.NativeStart.main(Native Method)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" android:orientation="vertical">
        <LinearLayout android:layout_width="fill_parent"  android:layout_height="wrap_content" android:orientation="horizontal">
        	<Button android:layout_width="wrap_content" android:text="Menu" android:id="@+id/buttonMenu" android:layout_height="wrap_content"></Button>
        	<Button android:layout_width="wrap_content" android:text="Voir image" android:id="@+id/buttonVoirImage" android:layout_height="wrap_content" android:layout_gravity="left"></Button>
        	<Button android:text="Scores" android:id="@+id/buttonScores" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal"></Button>
        </LinearLayout>
    	<LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content">
    		<ImageView android:layout_width="wrap_content" android:src="@drawable/icon" android:layout_height="wrap_content" android:id="@+id/imageViewLogo"></ImageView>
    		<TextView android:id="@+id/textViewTitre" android:layout_width="fill_parent" android:text="MemoKron" android:textSize="30px" android:layout_height="wrap_content" android:gravity="right"></TextView>
    	</LinearLayout>
        <android.opengl.GLSurfaceView  android:id="@+id/surfaceViewJeux" android:layout_width="wrap_content" android:layout_height="wrap_content"></android.opengl.GLSurfaceView>
     
        </LinearLayout>
    </LinearLayout>
    C'est quoi le problème ?

    Merci

  20. #20
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    06-28 17:19:04.069: ERROR/AndroidRuntime(200): java.lang.ClassCastException: android.view.ViewGroup$LayoutParams
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    view = (GLSurfaceView) findViewById(R.id.surfaceViewJeux);
     view.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
    La classe GLSurfaceView n'hérite pas de GroupView
    http://developer.android.com/referen...rfaceView.html

    Essayes plutôt de gérer la taille de ta View via le setHeight ainsi que le setWidth. Sinon il faut gérer le paramètre de la GroupView parente .

Discussions similaires

  1. Définir la taille des zones de texte
    Par loutsky dans le forum Access
    Réponses: 7
    Dernier message: 06/06/2006, 19h10
  2. Définir la taille des ses tablespaces
    Par madina dans le forum Oracle
    Réponses: 6
    Dernier message: 11/05/2006, 17h47
  3. Réponses: 2
    Dernier message: 06/02/2006, 20h41
  4. [CSS]Définir une taille pour chaque police
    Par Davboc dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 27/12/2005, 18h32
  5. [Impression] Définir la taille du papier
    Par HPJ dans le forum Windows
    Réponses: 7
    Dernier message: 06/09/2004, 15h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo