Je développe une activité peu OpenGL, il est composé par cette mise en page:GLSurfaceView OnPause montre seulement un écran noir
<RelativeLayout
android:id="@+id/vt_layout_opengl"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
>
<android.opengl.GLSurfaceView
android:id="@+id/surface_vt"
android:layout_width="900dp"
android:layout_height="285dp"
/>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@id/surface_vt"
android:layout_marginTop="5dp"
android:background="@drawable/barra_menu_vt"
>
<ImageButton android:id="@+id/vt_left_arrow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_marginLeft="20dp"
android:background="@drawable/prev_a"
android:onClick="prec"
/>
<ImageButton android:id="@+id/vt_right_arrow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/next_a"
android:layout_toRightOf="@+id/vt_left_arrow"
android:layout_marginLeft="20dp"
android:onClick="next"
/>
<TextView
android:id="@+id/vt_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/vt_right_arrow"
android:layout_marginLeft="30dp"
android:maxLength="30"
android:singleLine="true"
android:ellipsize="marquee"
/>
<ImageButton android:id="@+id/vt_information"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@+id/vt_addbookmarks"
android:layout_marginRight="20dp"
android:background="@drawable/info_a"
android:onClick="info"
/>
<ImageButton android:id="@+id/vt_addbookmarks"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@+id/vt_preferences"
android:layout_marginRight="20dp"
android:background="@drawable/book_a"
android:onClick="bookmark"
/>
<ImageButton android:id="@+id/vt_preferences"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginRight="20dp"
android:background="@drawable/sett_a"
android:onClick="settings"
/>
</RelativeLayout>
</RelativeLayout>
Il est montre une vue comme ceci:
Mais quand je appuyez sur le bouton d'accueil et je reviens sur mon application je ne vois qu'un écran noir, le GLSurfaceView et aussi le RelativeLayout ne sont pas affichés !!
Après environ deux système minuts disent:
Je suis très frustrant, je l'appelle GLSurface OnPause() et onResume() lorsque mon activité appelle les méthodes correspondantes.
Quelqu'un peut m'aider !! ????
je poste une partie de mon code:
@Override
public void onCreate(Bundle savedInstanceState) {
Log.d(TAG,"onCreate()");
super.onCreate(savedInstanceState);
setContentView(R.layout.virtualtour);
loading_ly = (RelativeLayout) findViewById(R.id.vt_layout_loading);
panorama_description = (TextView) findViewById(R.id.vt_description);
virtualtour_relatively = (RelativeLayout) findViewById(R.id.vt_layout_opengl);
vt_handler = new VirtualTourHandler(this);
ext_container = new GLExtensionContainer();
th_checkGL = new ThreadCheckOpenGL(ext_container, extensions_requested,vt_handler);
th_checkGL.start();
mFacebook = new Facebook(ArounderTouchMainActivity.APP_ID);
mAsyncRunner = new AsyncFacebookRunner(mFacebook);
msg = vt_handler.obtainMessage();
output_thread = msg.getData();
output_thread.putInt(VirtualTour.TYPE_TAG, VirtualTour.START_TAG);
vt_handler.handleMessage(msg);
}
Ceci est mon gestionnaire de classe interne (je l'utilise pour la texture du commutateur lorsque les utilisateurs effectuent une action)
@Override
public void handleMessage(Message msg) {
bd = msg.getData();
type = bd.getInt(TYPE_TAG);
bd = msg.getData();
switch (type) {
case GL_EXTENSIONS_CHECK_TAG:
showDialog(GL_EXTENSIONS_CHECK_DIALOG);
break;
case START_TAG:
Log.d(TAG, "START_TAG");
loading_ly.setVisibility(View.VISIBLE);
virtualtour_relatively.setVisibility(View.GONE);
progress_bar.setProgress(0);
thread = new DownloadImageProgressBar(vt_handler,getActivity());
thread.execute(panorama_input.get(position).getUrl_virtual());
break;
case BAR_TAG:
progress = bd.getInt(PROGRESS_TAG);
if(progress <= 100)
progress_bar.setProgress(progress);
break;
case SHUTDOWN_TAG:
finish();
break;
case SHOW_TAG:
Log.d(TAG, "SHOW_TAG");
if(first_visualization){
glSurface = (GLSurfaceView) findViewById(R.id.surface_vt);
glSurface.setDebugFlags(GLSurfaceView.DEBUG_CHECK_GL_ERROR);
renderer = new OpenGLRenderer(first_data,second_data,sphere,vt_handler,ext_container, ((panorama_input.get(position)).getType().compareTo(CardImage.SPHERE) == 0));
glSurface.setRenderer(renderer);
first_visualization = false;
}
// potrebbe essere fatto molto meglio: ricorda!
panorama_description.setText(panorama_input.get(position).getTitolo());
loading_ly.setVisibility(View.GONE);
virtualtour_relatively.setVisibility(View.VISIBLE);
renderer.setImage(first_data, second_data,((panorama_input.get(position)).getType().compareTo(CardImage.SPHERE) == 0));
renderer.resetZoom();
renderer.resetAngle();
renderer.startTimer();
enable_touch = false;
case NOCONNECTION_ERROR_TAG:
showDialog(OUTOFMEMORY_ERROR_DIALOG);
break;
case OUTOFMEMORY_ERROR_TAG:
showDialog(OUTOFMEMORY_ERROR_DIALOG);
break;
default:
break;
}
return;
}
}
Le DownloadImageProgressBar est un AsyncTask qui télécharge des images à partir du Web et effectue certaines actions de l'interface utilisateur via le gestionnaire d'activités.
Il y a mes méthodes OnPause et onResume:
@Override
protected void onResume() {
Log.d(TAG,"onResume()");
super.onResume();
if(glSurface != null)
glSurface.onResume();
}
@Override
protected void onPause() {
Log.d(TAG,"onPause()");
super.onPause();
glSurface.onPause();
}
j'appelle ces méthodes dans onSurfaceChanged et onSurfaceCreated:
public void setGLTexture(GL10 gl10) {
GL11 gl = (GL11) gl10;
//Generate one texture pointer...
gl.glGenTextures(2, textures_id);
gl.glClearColor(0.2f, 0.2f, 0.2f, 1.0f);
//...and bind it to our array
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures_id.get(0));
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, first, 0);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures_id.get(1));
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, second, 0);
return;
}
J'ai une autre question, quand mon commutateur d'activité en arrière-plan les images de textures I téléchargé avant sont supprimés?
Il est possible que ce soit les problèmes?
pouvez-vous poster du code (résumé) afin que nous comprenions ce que vous faites quand l'activité redémarre? –