【问题标题】:Android - View from next activity is showing up too earlyAndroid - 下一个活动的视图显示得太早
【发布时间】:2016-07-28 21:13:00
【问题描述】:

我有一个按钮,按下该按钮会将 MainActivity 更改为包含相机预览和进度条的 CameraActivity。但是,在活动切换之前,进度条会出现,因此您最终会在 MainActivity 上看到进度条一瞬间。这可能是什么原因造成的?谢谢

这是一些相关的代码。

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
}

【问题讨论】:

    标签: android android-intent android-camera


    【解决方案1】:

    检查这个答案 - Is there any way to listen for when the camera has loaded in? cwac-camera。

    相机的加载速度比标准视图慢,所以我的建议是创建加载视图(在您的布局中专门为此创建一些 ViewGroup)并且默认情况下它应该是可见的(当相机加载时间长时,这样的加载视图对用户更友好),默认情况下应该隐藏进度条,接下来当相机准备好时(检查链接问题)显示进度条并隐藏加载视图。

    一些代码

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

    【讨论】:

    • 谢谢。我不确定如何使用您发布的链接。我是否要创建一个包含该内容的新类,然后将其称为新的 CameraPreview?另外,我可以做些什么来优化相机加载速度,这样我就不必进行中间预览(或加载预览)。
    • 尝试使用回调 mCamera.setOneShotPreviewCallback(previewCallback);在 previewCallback 显示进度条
    • 我应该把它放在 mCamera = getCameraInstance() 之后吗?
    • 是的,它可以在那里,但请记住,必须在 onPreviewFrame 方法中隐藏和显示进度。
    • 我在 getCameraInstance() 之后添加了它,它不会触发
    猜你喜欢
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 2011-09-07
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多