Autore Topic: Glsurfaceview in xml layout  (Letto 1350 volte)

Offline aeroxr1

  • Utente junior
  • **
  • Post: 76
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    galaxy nexus
  • Sistema operativo:
    window 8.1
Glsurfaceview in xml layout
« il: 18 Settembre 2014, 01:11:57 CEST »
0
ciao,
sto provando a inserire la glsurfaceview come una normale view in un layout xml in maniera da poterla ridimensionare.

Purtroppo sto trovando molti problemi. In sostanza non capisco come debba fare -.-"

Consigli ?

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Glsurfaceview in xml layout
« Risposta #1 il: 18 Settembre 2014, 09:53:05 CEST »
0
Cosa intendi esattamente per ridimensionare?

Post unito: 18 Settembre 2014, 11:12:03 CEST
Comunque la glsurfaceview può essere inserita tranquillamente in un layout come qualsiasi altra view, solo che invece di usare direttamente la glsurfaceview devi derivare una tua classe da glsurfaceview e la inserisci nel layout (non dimenticarti di scrivere nell'xml tutto il package, esempio: com.miopackage.miasurfaceview).

Poi devi assicurarti di avere il costruttore che ha come parametri context e attributeset (altrimenti non funziona) e poi chiami subito la super passando i due parametri che ti sono arrivati.

 :-)


« Ultima modifica: 18 Settembre 2014, 11:12:03 CEST da undead, Reason: Merged DoublePost »

Offline aeroxr1

  • Utente junior
  • **
  • Post: 76
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    galaxy nexus
  • Sistema operativo:
    window 8.1
Re:Glsurfaceview in xml layout
« Risposta #2 il: 18 Settembre 2014, 11:37:06 CEST »
0
Cosa intendi esattamente per ridimensionare?

Post unito: 18 Settembre 2014, 11:12:03 CEST
Comunque la glsurfaceview può essere inserita tranquillamente in un layout come qualsiasi altra view, solo che invece di usare direttamente la glsurfaceview devi derivare una tua classe da glsurfaceview e la inserisci nel layout (non dimenticarti di scrivere nell'xml tutto il package, esempio: com.miopackage.miasurfaceview).

Poi devi assicurarti di avere il costruttore che ha come parametri context e attributeset (altrimenti non funziona) e poi chiami subito la super passando i due parametri che ti sono arrivati.

 :-)

ho fatto pari pari così, solo che la classe myglsurfaceview che estende glsurfaceview l'ho annidata all'interno dell'activity, e  il layout  non mi vede la classe myglsurfaceview :

Codice (Java): [Seleziona]
package rugani.tesi.animazione3d;


......


public class AnimationActivity extends Activity {


....
public GLSurfaceView mGLView;
....
public MyGLRenderer renderer;




MovementHandler gestore= new MovementHandler();


@Override
protected void onCreate(Bundle savedInstanceState) {


Logger.log("onCreate");


super.onCreate(savedInstanceState);
getActionBar().setDisplayHomeAsUpEnabled(true);




/*
mGLView = new GLSurfaceView(getApplication());
mGLView.setEGLContextClientVersion(2);
mGLView.setEGLConfigChooser(new AAConfigChooser(mGLView));
mGLView.setRenderer(renderer);
setContentView(mGLView);
*/

//mGLView = new MyGLSurfaceView(getApplication());
//setContentView(mGLView);


setContentView(R.layout.animationlayout);
mGLView = (GLSurfaceView)findViewById(R.id.provaanim);


}


@Override
    protected void onPause() {
        super.onPause();
        mGLView.onPause();
    }


    @Override
    protected void onResume() {
        super.onResume();
        mGLView.onResume();
    }
   


public class MyGLSurfaceView extends GLSurfaceView {


 public MyGLSurfaceView (Context context, AttributeSet attrs)
 {
        super(context, attrs);
       
        // Create an OpenGL ES 2.0 context.
       setEGLContextClientVersion(2);
       setEGLConfigChooser(new AAConfigChooser(this));
       // Set the Renderer for drawing on the GLSurfaceView
       renderer = new MyGLRenderer();
       setRenderer(renderer);
     
   }
   
}


public class MyGLRenderer implements GLSurfaceView.Renderer {


....


boolean direction=true;
public MyGLRenderer() {
....


}

Codice (XML): [Seleziona]
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:paddingBottom="@dimen/activity_vertical_margin"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".AnimationActivity">
 
<rugani.tesi.animazione3d.MyGLSurfaceView
  android:id="@+id/provaanim"
  android:layout_width="match_parent"
  android:layout_height="match_parent" />
 
</RelativeLayout>

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Glsurfaceview in xml layout
« Risposta #3 il: 18 Settembre 2014, 12:13:58 CEST »
0
Se metti nell'xml questo rugani.tesi.animazione3d.AnimationActivity.MyGLSurfaceView ?

Offline aeroxr1

  • Utente junior
  • **
  • Post: 76
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    galaxy nexus
  • Sistema operativo:
    window 8.1
Re:Glsurfaceview in xml layout
« Risposta #4 il: 18 Settembre 2014, 13:24:13 CEST »
0
ho fatto così :
Codice (XML): [Seleziona]
    <rugani.tesi.animazione3d.AnimationActivity.MyGLSurfaceView
       android:id="@+id/myglsurfaceView"
      />

ma niente da fare... :/

Citazione
09-18 13:25:51.731: E/ActivityThread(7767): Caused by: java.lang.ClassNotFoundException: Didn't find class "rugani.tesi.animazione3d.AnimationActivity.MyGLSurfaceView" on path: DexPathList[[zip file "/data/app/rugani.tesi.animazione3d-2.apk"],nativeLibraryDirectories=[/data/app-lib/rugani.tesi.animazione3d-2, /vendor/lib, /system/lib]]
« Ultima modifica: 18 Settembre 2014, 13:29:03 CEST da aeroxr1 »

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Glsurfaceview in xml layout
« Risposta #5 il: 18 Settembre 2014, 13:45:47 CEST »
0
Magari mi sbaglio, ma secondo me dipende tutto dal fatto che è una inner class dell'activity. Perchè quando compila il layout cerca un file java col nome MyGLSurfaceView e non lo trova.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline aeroxr1

  • Utente junior
  • **
  • Post: 76
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    galaxy nexus
  • Sistema operativo:
    window 8.1
Re:Glsurfaceview in xml layout
« Risposta #6 il: 18 Settembre 2014, 13:48:56 CEST »
0
Anche secondo me, però in che modo posso far si che questa sia visibile all'esterno ?

Ho provato con il dollaro cioè :
Codice (XML): [Seleziona]
    <view
       android:id="@+id/myglsurfaceView"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       class="rugani.tesi.animazione3d.AnimationActivity$MyGLSurfaceView" />

ma l'errore rimane :

Citazione
09-18 13:46:35.267: E/ActivityThread(9637): Failed to inflate
09-18 13:46:35.267: E/ActivityThread(9637): android.view.InflateException: Binary XML file line #21: Error inflating class rugani.tesi.animazione3d.AnimationActivity$MyGLSurfaceView

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Glsurfaceview in xml layout
« Risposta #7 il: 18 Settembre 2014, 14:14:02 CEST »
0
Io metterei la View in un file separato è poi:

Codice (XML): [Seleziona]
<rugani.tesi.animazione3d.MyGLSurfaceView
      android:id="@+id/myglsurfaceView"
     />
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Glsurfaceview in xml layout
« Risposta #8 il: 18 Settembre 2014, 14:35:17 CEST »
0
altrimenti puoi provare a lasciarla inner class e dichiararla static.

Ma in generale è meglio se la stacchi e fai un file separato, come dice bradipao.  :-)

Offline aeroxr1

  • Utente junior
  • **
  • Post: 76
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    galaxy nexus
  • Sistema operativo:
    window 8.1
Re:Glsurfaceview in xml layout
« Risposta #9 il: 18 Settembre 2014, 14:53:58 CEST »
0
il problema del file separato è dividere quest'ultimo dal Myrenderer e dall'activity.

In pratica myrenderer mi dipende molto dall'activity. Ora sto provando a scollegarla ;)

Per scollegarla però ho due problemini :

accedere alle risorse da classi che non estendono activity
avere una variabile globale/oggetto globale in comune a tutte le classi.

« Ultima modifica: 18 Settembre 2014, 15:29:46 CEST da aeroxr1 »

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Glsurfaceview in xml layout
« Risposta #10 il: 18 Settembre 2014, 18:55:50 CEST »
0
Hai provato mantenendo intatto questo:

Codice (XML): [Seleziona]
    <view
       android:id="@+id/myglsurfaceView"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       class="rugani.tesi.animazione3d.AnimationActivity$MyGLSurfaceView" />

e dichiarando la classe MyGLSurfaceView static e public?

Offline aeroxr1

  • Utente junior
  • **
  • Post: 76
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    galaxy nexus
  • Sistema operativo:
    window 8.1
Re:Glsurfaceview in xml layout
« Risposta #11 il: 19 Settembre 2014, 01:24:28 CEST »
0
Con quello diventava un problema , perche tutti i file all'interno devono essere static :/
Proverò a suddividerle ..

Inviato dal mio Galaxy Nexus utilizzando Tapatalk



Post unito: 19 Settembre 2014, 21:29:49 CEST
Ci sono riuscito :)

Il metodo giusto è stato quello di dividere myrenderer e myglsurfaceview in classi distinte :)

QUesto ha reso anche il codice molto più pulito :)

Mi potete dare una dritta su che tipo di layout posso usare per fare una cosa del genere ?

-------------------------------------
MyGLSurfaceView




-------------------------------------
textview - button
-------------------------------------




« Ultima modifica: 19 Settembre 2014, 21:29:49 CEST da aeroxr1, Reason: Merged DoublePost »

Offline aeroxr1

  • Utente junior
  • **
  • Post: 76
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    galaxy nexus
  • Sistema operativo:
    window 8.1
Re:Glsurfaceview in xml layout
« Risposta #12 il: 22 Settembre 2014, 15:06:46 CEST »
0
Ho risolto in questa maniera :
ho usato un LInearLayout esterno orientamento verticale con all'interno la View della GlsurfaceView e un altro LinearLayout con orientamento orizzontale. Nel LinearLayout interno ho inserito i Button e TextView che volevo :)

GRazie a tutti per l'aiuto ! :)
« Ultima modifica: 22 Settembre 2014, 15:10:40 CEST da aeroxr1 »