Диалоговое окно прогресса на примере Rajawali Vuforia

Можно отобразить диалог прогресса при загрузке модели .obj. Я попытался вызвать ProgressDialog в RajawaliVuforiaExampleRenderer.java, но он сказал: «Невозможно создать обработчик внутри потока, который не вызвал Looper.prepare()»

Я вставил часть кода здесь:

защищенная пустота initScene() {

    mLight = new DirectionalLight(.1f, 0, -1.0f);
    mLight.setColor(1.0f, 0, 0);
    mLight.setPower(1);

    getCurrentScene().addLight(mLight);

    LoaderOBJ objParser = new LoaderOBJ(mContext.getResources(),
            mTextureManager, R.raw.wall_obj);

    try {
        // Load model
        objParser.parse();
        wall = objParser.getParsedObject();
        addChild(wall);
    } catch (Exception e) {
        e.printStackTrace();
    }

}

EDITED: я прочитал комментарий от Abhishek Agarwal и обновил код для части Renderer, теперь у меня проблема с вызовом ProgressDialog при загрузке модели, вот мой код для потока пользовательского интерфейса.

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setScreenOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    // receive file path
    String filePath = this.getIntent().getStringExtra("FullFilePath");
    Log.i(filePath, "FullFilePath:" + filePath);

    waitDialog = ProgressDialog.show(this, "", "Loading", true);
    waitDialog.show();
    new ModelLoader().execute();

}

@Override
protected void setupTracker() {
    int result = initTracker(TRACKER_TYPE_MARKER);
    if (result == 1) {
        result = initTracker(TRACKER_TYPE_IMAGE);
        if (result == 1) {
            super.setupTracker();
        } else {RajLog.e("Couldn't initialize image tracker.");
        }
    } else {
        RajLog.e("Couldn't initialize marker tracker.");
    }}

protected void initApplicationAR() {
    super.initApplicationAR();
    createImageMarker("marker.xml");
}

protected void initRajawali() {
    super.initRajawali();
    mRenderer = new ModelRenderer(this);
    mRenderer.setSurfaceView(mSurfaceView);
    super.setRenderer(mRenderer);

    mUILayout = this;
    mUILayout.setContentView(mLayout, new LayoutParams(
            LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
}

private class ModelLoader extends AsyncTask<Void, Void, Void> {

    @Override
    protected Void doInBackground(Void... params) {
        startVuforia();
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        waitDialog.dismiss();
    }
}

person Then    schedule 19.12.2013    source источник


Ответы (2)


Диалоговое окно прогресса может отображаться в UIThread. Поэтому покажите диалоговое окно прогресса в основном потоке, а не в GLThread.

person Abhishek Agarwal    schedule 19.12.2013

Вы можете использовать Handler для работы с threadUI :

`private Handler mHandler = new Handler();
...
mHandler.post(new Runnable() {
        @Override
        public void run() {
            view_progressBar.setProgress(val);
        }
    });`
person artrol    schedule 19.09.2014