[英]ImageButton turns into black blank on OpenGL ES environment of Android
我的相機應用程序的預覽由OpenGL ES 2.0的GLSurfaceView
運行。 logcat中沒有錯誤。 該應用程序的所有功能均正常運行。 但是,有時當我從后置攝像頭切換到前置攝像頭時, ImageButton
會變成黑色空白,或者出現不利情況。
在后置攝像頭和前置攝像頭之間進行切換的步驟如下。
-1。 銷毀Renderer
對象(在自定義的Renderer
類上)
public void onSurfaceDestroyed() {
......
if (mCamera != null) {
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
mSTexture.release();
mSTexture = null;
mUpdateST = false;
pTexCoord = null;
pVertex = null;
deleteTexture();
......
}
-2。 銷毀相機視圖(在自定義的GLSurfaceView
類上)
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
super.surfaceDestroyed(holder);
mRenderer.onSurfaceDestroyed();
mRenderer = null;
mGestureDetector = null;
mHandler = null;
}
-3。 創建新的相機視圖(在MainActivity
addCameraView方法處)
public void addCameraView() {
mCameraView = new CameraView(this, mWidth, mHeight, mPicSizeR, mPicSizeF, mCameraMode, mFlashMode, mHandler);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER);
mCameraView.setLayoutParams(params);
mRootLayout.addView(mCameraView, 0);
}
-4。 創建新的Renderer
對象(在自定義GLSurfaceView
類的構造函數中)
public class CameraView extends GLSurfaceView {
CameraActivity.CameraHandler mHandler;
CameraRenderer mRenderer;
GestureDetector mGestureDetector;
CameraView(Context context, int width, int height, int picSizeR, int picSizeF, boolean camera, int flash, CameraActivity.CameraHandler handler) {
super(context);
mHandler = handler;
mRenderer = new CameraRenderer(this, width, height, picSizeR, picSizeF, camera, flash, handler);
setEGLContextClientVersion(2);
setRenderer(mRenderer);
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
}
......
}
起初,我認為問題出在內存不足。 為了獲得更多內存,在清單文件中插入了代碼android:largeHeap="true"
。 但是,它沒有用。
我不知道出什么問題了。 我需要幫助。
我得到了有關此問題的解決方案。 這是要刪除onSurfaceDestroyed()
中的deleteTexture()
onSurfaceDestroyed()
。 deleteTexture()
的內容如下。
public void deleteTexture() {
GLES20.glDeleteTextures(1, hTex, 0);
}
我不完全知道為什么Renderer
對象被破壞時經常調用GLES20.glDeleteTextures()
會導致ImageButton
混亂。 因為我只有很少的使用OpenGL ES 2.0的經驗。 我希望有人能很好地了解OpenGL ES。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.