2011-04-08 68 views
0

我正在尝试开发用于培训目的的AR应用程序。 有一个主要活动,其中包含一个带有两个视图的FrameLayout:摄像机预览(SurfaceView实现SurfaceHolder.Callback)和另一个自定义曲面,用于在相机预览上绘制文本。 这是FrameLayout里MainActivity的onCreate方法中创建:从其他活动导航时不显示相机预览和AR项目

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 

    try{ 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
       WindowManager.LayoutParams.FLAG_FULLSCREEN); 

     //Panel for AR items 
     **panelSurface = new PanelSurface(this);** 

     WindowManager w = getWindowManager(); 
     Display d = w.getDefaultDisplay(); 
     int width = d.getWidth(); 
     int height = d.getHeight(); 
     panelSurface.setScreenSize(width, height); 


     loadARItems();    

     //General frame 
     FrameLayout rl = new FrameLayout(this); 
     //Camera Surface 
     **cv = new CustomCameraView(this);** 
     rl.addView(cv, width, height); 
     rl.addView(panelSurface, width, height); 
     setContentView(rl); 

     //Initialize sensors 
     sensorMan = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
     sensor = sensorMan.getDefaultSensor(Sensor.TYPE_ORIENTATION); 
     locMan = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
    } 
    catch(Exception e){ 
     Log.e(TAG, "Error creating main activity: " + e.getMessage()); 
    } 
} 

如果此活动是被称为第一个活动:相机预览与我AR项目在它正确显示。 尽管如此,当我来自另一个活动时出现问题: 有一个包含多个按钮的菜单活动。其中一个按钮将呼叫主要活动:

private OnClickListener mapListener = new OnClickListener() { 
    public void onClick(View v) { 
     Intent intent = new Intent(MenuActivity.this, MainActivity.class); 
     startActivity(intent);   
    } 
}; 

从其他活动导航时,相机未显示!屏幕保持黑屏。 而AR项目被绘制一次,但没有刷新,他们再次绘制所有的屏幕画面清洁之前,以显示运动!

为什么具有相同代码的同一活动在从其他活动调用时无法正常工作???

调试我已经检查这两种情况下: 当MainActivity是第一活动,日志: 04-08 13:43:03.498:INFO/ActivityManager(85):显示活动com.lagunitacrew.activities/.MainActivity: 929毫秒(总计929毫秒) 在打开相机前显示。 但是,在第二种情况下,当从菜单活动调用MainActivity时,此跟踪是在打开相机后写入的。

非常感谢!

回答

0

当您的活动进入后台时,您是否尝试销毁当前屏幕?我认为问题是camera.open()函数在返回时不起作用。我建议你编写一个函数来在应用程序转到后台并在onPause函数中调用此函数时销毁UI。