Gingerbread上的Android ViewPager和Camera Preview问题



我在ViewPagers和Camera应用程序上做了大量的文档研究,事实上一切都很好,除了GingerBread上的一个主要问题,我没有发现任何关于sso的问题,所以我会试着问这个…

在我的应用程序中有一个ViewPager(支持库v4)显示两个片段:一个,将它称为主片段,一个显示活动开始时,某些信息显示给用户,包括一个imageview,它最初是空的和隐藏的。

通过切换到下一个片段,用户看到相机预览,这是创建活动时创建的(即使它不显示直到swype)和拍照按钮。

当拍摄照片时,视图以编程方式被带回到主片段,即Imageview将加载新照片并取消隐藏,以便用户可以看到混合了其他预先存在信息的图像。

如果用户不喜欢这张照片,他可以再次切换回相机片段并拍摄另一张,如此反复,直到他对结果满意为止。

出于这个原因,在翻转回主片段之前,我调用mccamera . restartpreview(),并确保相机准备好,如果用户切换回来。

在Android 4上一切都运行得很顺利。但是当我在2.3.3 (API级别10)上测试时,当主片段被回调时,相机预览仍然在前景中,并隐藏视图。你可以看到,甚至滚动,视图的其余部分,在屏幕的部分,相机碎片显示按钮,但其余部分重叠的相机预览。

以下是相关函数的代码:

CameraFragment onPictureTaken ()

private PictureCallback mPicture = new PictureCallback() {
    @Override
    public void onPictureTaken(byte[] data, Camera camera) {
        File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE);
        if (pictureFile == null){
            Log.d(TAG, "Error creating media file, check storage permissions: ");
            return;
        }
        try {
            FileOutputStream fos = new FileOutputStream(pictureFile);
            Log.e(TAG, "FILE " +pictureFile.getAbsoluteFile().toString());
            Bitmap bitmap = rotated(data);
            bitmap.compress(CompressFormat.JPEG, PICTURE_QUALITY, fos);
            bitmap.recycle(); //devo davvero chiamarla esplicitamente ??
            mediaFile = pictureFile;
            mPreview.restartPreview();
            // go back to newpin activity to show it
            ((NewPinActivity) myActivity).newPin.setMedia(mediaFile.getAbsoluteFile().toString());
            ((NewPinActivity) myActivity).takeBack();
        } catch (FileNotFoundException e) {
            Log.d(TAG, "File not found: " + e.getMessage());
        }
    }
};

和mainfragment takeBack()方法

public void takeBack(){
    mViewPager.setCurrentItem(0, true);
    String mainFragTag = "android:switcher:"+R.id.newpinpager+":0";
    Fragment fragMain = this.getSupportFragmentManager().findFragmentByTag(mainFragTag);
    try {
        ((NewPinMainFragment)fragMain).showPhoto(newPin.getMedia());
    } catch (NullPointerException e){
    }
}

有没有人知道这是ViewPager和GingerBread的问题,还是CameraPreview和GingerBread的问题?

我自己找到了答案,我把它贴在这里,以防对别人有用。

显然这个问题是由setCurrentItem方法的smoothscroll选项引起的。通过修改

修复了这个问题
mViewPager.setCurrentItem(0, true);

mViewPager.setCurrentItem(0, false);

最新更新