Я пытаюсь разработать приложение AR для учебных целей.
Существует основное действие, которое содержит FrameLayout с двумя видами: предварительный просмотр камеры (SurfaceView реализует SurfaceHolder.Callback) и другую пользовательскую поверхность для рисования текста поверх предварительного просмотра камеры.
Этот FrameLayout создается в методе onCreate MainActivity:
@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 вызывается из действия «Меню», эта трассировка записывается после открытия камеры
Большое спасибо !!!