bigbang Posté(e) 27 juin 2010 Share Posté(e) 27 juin 2010 Bonjour chers Androidiens, j'aurais une petite question peut-être toute bête : Y a t il une différence entre une Activity principale et une Activity que l'on a appelé par startActivity() ? En fait, pour faire simple, j'ai fait une Activity affichant en background la camera, et par dessus j'affiche des objets 3D OpenGL ( réalité augmentée). Le problème c'est que ça marche quand je défini cette activity en MAIN, mais pas si elle est appelée par un startActivity(). Ça m'affiche juste la camera mais pas la sur-couche OpenGL... C'est pour cela que j'en déduit qu'il doit y avoir une différence... mais laquelle ? :/ Voilà, si quelqu'un a une petite idée d'où pourrait venir le problème c'est m'aiderait fortement =) merci d'avance, BigBang Lien vers le commentaire Partager sur d’autres sites More sharing options...
bigbang Posté(e) 29 juin 2010 Auteur Share Posté(e) 29 juin 2010 personne n'a une petite idée ? :/ Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 30 juin 2010 Share Posté(e) 30 juin 2010 ben non, regarde un peu dans logcat fais du debug au niveau de ta "boucle" opengl Lien vers le commentaire Partager sur d’autres sites More sharing options...
bigbang Posté(e) 30 juin 2010 Auteur Share Posté(e) 30 juin 2010 Merci pour ta réponse. oui, j'ai checké les logs, et il n'y a aucune différence : ca passe bien dans ma boucle de dessin , mais en activity secondaire rien ne s'affiche :/ c'est comme si ma GLSurface n'existait pas ou n'etait pas au premier plan ... Là je sèche vraiment ... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 30 juin 2010 Share Posté(e) 30 juin 2010 t'as fait attention aux layouts ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
bigbang Posté(e) 30 juin 2010 Auteur Share Posté(e) 30 juin 2010 je pense que oui, vu que j'utilise le même layout je vois pas ce qui peut changer. à moins que l'activity principale ai une influence sur les layout de ses enfants ? :/ Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 30 juin 2010 Share Posté(e) 30 juin 2010 il n'y a pas d'interactions comme ça entre Activity si tu veux poster un peu de code ... Lien vers le commentaire Partager sur d’autres sites More sharing options...
bigbang Posté(e) 30 juin 2010 Auteur Share Posté(e) 30 juin 2010 a vrai dire je saurais pas vraiment par ou commencer, car j'ai beaucoup de classes dont certaines de gestion de camera, de rendering OpenGL ( la plupart viennent de la librairie NyARToolkit ) et pas trop le temps de faire du tri actuellement, mais merci quand même =) au moins je sais que ça vient pas de l'activity, je vais continuer à chercher, je posterais si je trouve une solution Lien vers le commentaire Partager sur d’autres sites More sharing options...
mokbir Posté(e) 30 juin 2010 Share Posté(e) 30 juin 2010 Bonjour chers Androidiens,j'aurais une petite question peut-être toute bête : Y a t il une différence entre une Activity principale et une Activity que l'on a appelé par startActivity() ? En fait, pour faire simple, j'ai fait une Activity affichant en background la camera, et par dessus j'affiche des objets 3D OpenGL ( réalité augmentée). Le problème c'est que ça marche quand je défini cette activity en MAIN, mais pas si elle est appelée par un startActivity(). Ça m'affiche juste la camera mais pas la sur-couche OpenGL... C'est pour cela que j'en déduit qu'il doit y avoir une différence... mais laquelle ? :/ Voilà, si quelqu'un a une petite idée d'où pourrait venir le problème c'est m'aiderait fortement =) merci d'avance, BigBang Si je comprends bien ton code actuel, il te manque quelque côté organisationnel des composants. Veux-tu juste nous montrer le code de ton activity, juste les signature. Lien vers le commentaire Partager sur d’autres sites More sharing options...
bigbang Posté(e) 30 juin 2010 Auteur Share Posté(e) 30 juin 2010 Salut mokbir, bon du coup, voici le code de mon activity qui plante (j'ai supprimé quelques méthodes) le code de la méthode "init()" est tiré de l'exemple de la librairie NyARToolkit public class DamiARGameActivity extends Activity implements View.OnClickListener, SurfaceHolder.Callback { private final int MENU_TOGGLE_FLASH = 0; public static final String TAG = "DamiARGameActivity"; public static final int CROP_MSG = 1; public static final int FIRST_TIME_INIT = 2; public static final int RESTART_PREVIEW = 3; public static final int CLEAR_SCREEN_DELAY = 4; public static final int SHOW_LOADING = 5; public static final int HIDE_LOADING = 6; public static final int KEEP = 7; private static final int SCREEN_DELAY = 2 * 60 * 1000; private SharedPreferences mPreferences; private boolean mTranslucentBackground = true; private boolean isYuv420spPreviewFormat = false; private CameraIF mCameraDevice; private SurfaceHolder mSurfaceHolder = null; private GLSurfaceView mGLSurfaceView; private ModelRenderer mRenderer; private GameManager _gameManager; private boolean mFirstTimeInitialized; private PreviewCallback mPreviewCallback = new JpegPreviewCallback(); private ARToolkitDrawer arToolkit = null; private Handler mHandler = new MainHandler(); private boolean isUseSerface = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(TAG, "onCreate"); requestWindowFeature(Window.FEATURE_PROGRESS); Window win = getWindow(); win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); win.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); init(); } private void init() { Log.d(TAG, ""+this); _gameManager = GameManager.getInstance(); _gameManager.setContext(this); _gameManager.loadGame(); mRenderer = new ModelRenderer(mTranslucentBackground); mRenderer.setMainHandler(mHandler); // init Camera. if(getString(R.string.camera_name).equals("jp.androidgroup.nyartoolkit.hardware.SocketCamera")) { mCameraDevice = new SocketCamera(getString(R.string.server_addr), Integer.valueOf(getString(R.string.server_port))); setContentView(R.layout.camera); mGLSurfaceView = (GLSurfaceView) findViewById(R.id.GL_view); // OpenGL Verw mGLSurfaceView.setRenderer(mRenderer); mGLSurfaceView.getHolder().setFormat(PixelFormat.RGBA_8888); } else if(getString(R.string.camera_name).equals("jp.androidgroup.nyartoolkit.hardware.StaticCamera")) { mCameraDevice = new StaticCamera(getAssets()); setContentView(R.layout.camera); mGLSurfaceView = (GLSurfaceView) findViewById(R.id.GL_view); // OpenGL Verw mGLSurfaceView.setRenderer(mRenderer); mGLSurfaceView.getHolder().setFormat(PixelFormat.RGBA_8888); } else if(getString(R.string.camera_name).equals("jp.androidgroup.nyartoolkit.hardware.HT03ACamera")) { isUseSerface = true; isYuv420spPreviewFormat = true; if (mTranslucentBackground) { mGLSurfaceView = new GLSurfaceView(this); mGLSurfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0); mGLSurfaceView.setRenderer(mRenderer); mGLSurfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT); SurfaceView mSurfaceView = new SurfaceView(this); mCameraDevice = new HT03ACamera(this, mSurfaceView); mPreferences = PreferenceManager.getDefaultSharedPreferences(this); setContentView(mGLSurfaceView); addContentView(mSurfaceView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); } else { setContentView(R.layout.ht03acamera); SurfaceView mSurfaceView = (SurfaceView) findViewById(R.id.HT03A_camera_preview); mCameraDevice = new HT03ACamera(this, mSurfaceView); mPreferences = PreferenceManager.getDefaultSharedPreferences(this); mGLSurfaceView = (GLSurfaceView) findViewById(R.id.HT03A_GL_view); mGLSurfaceView.setRenderer(mRenderer); } } else if(getString(R.string.camera_name).equals("jp.androidgroup.nyartoolkit.hardware.UVCCamera")) { isUseSerface = true; if (mTranslucentBackground) { mGLSurfaceView = new GLSurfaceView(this); mGLSurfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0); mGLSurfaceView.setRenderer(mRenderer); mGLSurfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT); SurfaceView mSurfaceView = new SurfaceView(this); mCameraDevice = new UVCCamera(this, mSurfaceView); mPreferences = PreferenceManager.getDefaultSharedPreferences(this); setContentView(mGLSurfaceView); addContentView(mSurfaceView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); } else { setContentView(R.layout.uvccamera); SurfaceView mSurfaceView = (SurfaceView) findViewById(R.id.UVC_camera_preview); mCameraDevice = new UVCCamera(this, mSurfaceView); mPreferences = PreferenceManager.getDefaultSharedPreferences(this); mGLSurfaceView = (GLSurfaceView) findViewById(R.id.UVC_GL_view); mGLSurfaceView.setRenderer(mRenderer); } } else if (getString(R.string.camera_name).equals("jp.androidgroup.nyartoolkit.hardware.N1Camera")) { isUseSerface = true; isYuv420spPreviewFormat = true; if (mTranslucentBackground) { mGLSurfaceView = new GLSurfaceView(this); mGLSurfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0); mGLSurfaceView.setRenderer(mRenderer); mGLSurfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT); SurfaceView mSurfaceView = new SurfaceView(this); mCameraDevice = new N1Camera(this, mSurfaceView); mPreferences = PreferenceManager.getDefaultSharedPreferences(this); setContentView(mGLSurfaceView); addContentView(mSurfaceView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); } else { setContentView(R.layout.n1camera); SurfaceView mSurfaceView = (SurfaceView) findViewById(R.id.N1_camera_preview); mCameraDevice = new N1Camera(this, mSurfaceView); mPreferences = PreferenceManager.getDefaultSharedPreferences(this); mGLSurfaceView = (GLSurfaceView) findViewById(R.id.N1_GL_view); mGLSurfaceView.setRenderer(mRenderer); } } mCameraDevice.setPreviewCallback(mPreviewCallback); // init ARToolkit. InputStream camePara = getResources().openRawResource(R.raw.camera_para); ArrayList patt = new ArrayList(); patt.add(getResources().openRawResource(R.raw.pattperso)); patt.add(getResources().openRawResource(R.raw.pattperso2)); patt.add(getResources().openRawResource(R.raw.pattperso3)); patt.add(getResources().openRawResource(R.raw.pattperso4)); arToolkit = new ARToolkitDrawer(camePara, patt, mRenderer, mTranslucentBackground, isYuv420spPreviewFormat); } @Override public void onStart() { Log.d(TAG, "onStart()"); super.onStart(); mCameraDevice.onStart(); } @Override public void onResume() { Log.d(TAG, "onResume()"); super.onResume(); mGLSurfaceView.onResume(); mCameraDevice.onResume(); if (mSurfaceHolder != null) { // If first time initialization is not finished, put it in the // message queue. if (!mFirstTimeInitialized) { mHandler.sendEmptyMessage(FIRST_TIME_INIT); } else { initializeSecondTime(); } } mHandler.sendEmptyMessageDelayed(CLEAR_SCREEN_DELAY, SCREEN_DELAY); } @Override public void onStop() { Log.d(TAG, "onStop()"); mCameraDevice.onStop(); super.onStop(); } @Override protected void onPause() { Log.d(TAG, "onPause()"); mCameraDevice.onPause(); mGLSurfaceView.onPause(); super.onPause(); } @Override protected void onDestroy() { Log.d(TAG, "onDestroy()"); mCameraDevice.onDestroy(); GameManager.getInstance().onDestroy(); finish(); super.onDestroy(); } @Override public void onClick(View v) { // TODO Auto-generated method stub } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case CROP_MSG: { Intent intent = new Intent(); if (data != null) { Bundle extras = data.getExtras(); if (extras != null) { intent.putExtras(extras); } } setResult(resultCode, intent); finish(); break; } } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { //Log.d(TAG, "surfaceChanged"); // Make sure we have a surface in the holder before proceeding. if (holder.getSurface() == null) { Log.d(TAG, "holder.getSurface() == null"); return; } // We need to save the holder for later use, even when the mCameraDevice // is null. This could happen if onResume() is invoked after this // function. mSurfaceHolder = holder; if(!isUseSerface) { return; } if(mCameraDevice instanceof HT03ACamera) { HT03ACamera cam = (HT03ACamera)mCameraDevice; cam.surfaceChanged(holder, format, w, h); } else if(mCameraDevice instanceof UVCCamera) { UVCCamera cam = (UVCCamera)mCameraDevice; cam.surfaceChanged(holder, format, w, h); } else if (mCameraDevice instanceof N1Camera) { N1Camera cam = (N1Camera)mCameraDevice; cam.surfaceChanged(holder, format, w, h); } //Camera.Parameters p = mCameraDevice.getParameters(); // If first time initialization is not finished, send a message to do // it later. We want to finish surfaceChanged as soon as possible to let // user see preview first. if (!mFirstTimeInitialized) { mHandler.sendEmptyMessage(FIRST_TIME_INIT); } else { initializeSecondTime(); } } @Override public void surfaceCreated(SurfaceHolder holder) { if(!isUseSerface) { return; } if(mCameraDevice instanceof HT03ACamera) { HT03ACamera cam = (HT03ACamera)mCameraDevice; cam.surfaceCreated(holder); } else if(mCameraDevice instanceof UVCCamera) { UVCCamera cam = (UVCCamera)mCameraDevice; cam.surfaceCreated(holder); } else if (mCameraDevice instanceof N1Camera) { N1Camera cam = (N1Camera)mCameraDevice; cam.surfaceCreated(holder); } } @Override public void surfaceDestroyed(SurfaceHolder holder) { if(!isUseSerface) { return; } if(mCameraDevice instanceof HT03ACamera) { HT03ACamera cam = (HT03ACamera)mCameraDevice; cam.surfaceDestroyed(holder); } else if(mCameraDevice instanceof UVCCamera) { UVCCamera cam = (UVCCamera)mCameraDevice; cam.surfaceDestroyed(holder); } else if (mCameraDevice instanceof N1Camera) { N1Camera cam = (N1Camera)mCameraDevice; cam.surfaceDestroyed(holder); } mSurfaceHolder = null; } // ---------------------------- Callback classes --------------------------------- private final class JpegPreviewCallback implements PreviewCallback { @Override public void onPreviewFrame(byte [] jpegData, Camera camera) { //Log.d(TAG, "JpegPictureCallback.onPreviewFrame"); if(jpegData != null) { //Log.d(TAG, "data exist"); arToolkit.draw(jpegData); } else { try { // The measure against over load. Thread.sleep(500); } catch (InterruptedException e) { ; } } } }; // ---------------------------- Handler classes --------------------------------- /** This Handler is used to post message back onto the main thread of the application */ private class MainHandler extends Handler { @Override public void handleMessage(Message msg) { mCameraDevice.handleMessage(msg); switch (msg.what) { case KEEP: { if (msg.obj != null) { mHandler.post((Runnable)msg.obj); } break; } case CLEAR_SCREEN_DELAY: { getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); break; } case FIRST_TIME_INIT: { initializeFirstTime(); break; } case SHOW_LOADING: { showDialog(DIALOG_LOADING); break; } case HIDE_LOADING: { try { dismissDialog(DIALOG_LOADING); removeDialog(DIALOG_LOADING); } catch (IllegalArgumentException e) { } break; } } } } public Handler getMessageHandler() { return this.mHandler; } private static final int DIALOG_LOADING = 0; @Override protected Dialog onCreateDialog(int id) { switch (id) { case DIALOG_LOADING: { ProgressDialog dialog = new ProgressDialog(this); dialog.setMessage("Loading ..."); // dialog.setIndeterminate(true); dialog.setCancelable(false); dialog.getWindow().setFlags (WindowManager.LayoutParams.FLAG_BLUR_BEHIND, WindowManager.LayoutParams.FLAG_BLUR_BEHIND); return dialog; } default: return super.onCreateDialog(id); } } } Lien vers le commentaire Partager sur d’autres sites More sharing options...
bigbang Posté(e) 30 juin 2010 Auteur Share Posté(e) 30 juin 2010 bon et bien en fait c'est bien un problème de Layout en mettant l'image de ma camera sur seulement la moitié de l'ecran je vois mon OpenGL derriere... questions maintenant : pourquoi passe-t-il derrière en Activity secondaire et pas en activity principale ? comment forcer mon GLSurfaceView a être au premier plan ? merci d'avance edit: c'est bon pour le mettre au premier plan, il faut tout simplement l'appeler après -___-' Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.