2016-07-28 15 views
0

Ich habe eine Schaltfläche, die MainActivity in CameraActivity mit einer Kameravorschau und einer Fortschrittsanzeige ändert. Kurz bevor die Aktivität wechselt, wird jedoch der Fortschrittsbalken angezeigt, sodass Sie den Fortschrittsbalken für einen Sekundenbruchteil auf MainActivity sehen. Was könnte das verursachen? DankeAndroid - Die Ansicht der nächsten Aktivität wird zu früh angezeigt

Hier ist ein paar relevante Code.

MainActivity.java

public void openCamera(View view) { 
    if (getCameraInstance() == null) { 
     Toast.makeText(FeedActivity.this, "Camera is unavailable right now", Toast.LENGTH_LONG).show(); 
    } else { 
     Intent i = new Intent(MainActivity.this, CameraActivity.class); 
     startActivity(i); 
    } 
} 

CameraActivity.java

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_camera); 

    getSupportActionBar().hide(); 

    progressBar = (ProgressBar) findViewById(R.id.progressBar); 
    animation = ObjectAnimator.ofInt(progressBar, "progress", 0, 100); 
    animation.setDuration(10000); 
    animation.setInterpolator(new LinearInterpolator()); 

    // Create an instance of Camera 
    mCamera = getCameraInstance(); 

    // Create our Preview view and set it as the content of our activity. 
    mPreview = new CameraPreview(this, mCamera, currentCameraId); 
    preview = (FrameLayout) findViewById(R.id.camera_preview); 
    preview.addView(mPreview); 


} 

/** A safe way to get an instance of the Camera object. */ 
public static Camera getCameraInstance(){ 
    Camera c = null; 
    try { 
     c = Camera.open(); // attempt to get a Camera instance 
    } 
    catch (Exception e){ 
     // Camera is not available (in use or does not exist) 
    } 
    return c; // returns null if camera is unavailable 
} 

Antwort

1

prüfen diese Antwort - Is there any way to listen for when the camera has loaded in? cwac-camera.

Die Kamera wird langsamer geladen als die Standardansicht, daher besteht mein Vorschlag darin, eine Ladeansicht zu erstellen (speziell in diesem Layout eine ViewGroup zu erstellen) und sie sollte standardmäßig sichtbar sein (diese Ladeansicht ist benutzerfreundlicher, wenn die Kamera geladen wird) lang), sollte die Fortschrittsleiste standardmäßig ausgeblendet werden, wenn die Kamera bereit ist (siehe die verknüpfte Frage), zeige Fortschrittsbalken an und verstecke die Ladeansicht.

Einige Code

mCamera.setOneShotPreviewCallback(new Camera.PreviewCallback() { 
    @Override 
    public void onPreviewFrame(byte[] data, Camera camera) { 
     // camera is "loaded" 
     //show progressbar 
     //hide loading screen 
    }); 
+0

Dank. Ich bin mir jedoch nicht sicher, wie ich den Link verwenden soll, den Sie gepostet haben. Mache ich eine neue Klasse, die das beinhaltet, und nenne das stattdessen eine neue CameraPreview? Außerdem kann ich die Ladegeschwindigkeit der Kamera optimieren, so dass ich keine Zwischenvorschau (oder Ladevorschau) brauche. – Jill

+0

versuchen, Callback zu verwenden mCamera.setOneShotPreviewCallback (previewCallback); in der VorschauCallback show progressbar –

+0

@Jill überprüfe meine aktualisierte Antwort –