私は ViewPagers と Camera アプリで広範なドキュメント調査を行いましたが、GingerBread の主要な問題を除いて、すべてが非常にうまく機能することを確認しました。
私のアプリケーションには、2 つのフラグメントを表示する ViewPager (サポート ライブラリ v4) があります。と隠されています。
次のフラグメントにスワイプすると、アクティビティの作成時に作成されるカメラ プレビュー (スワイプするまで表示されない場合でも) と、写真を撮るためのボタンがユーザーに表示されます。
写真が撮影されると、ビューはプログラムによってメイン フラグメントに戻され、imageview に新しい写真が読み込まれ、非表示が解除されるため、ユーザーは他の既存の情報と混合された画像を見ることができます。
ユーザーが写真を気に入らない場合は、もう一度スワイプしてカメラ フラグメントに戻り、別の写真を撮り、結果に満足するまで繰り返します。
このため、メイン フラグメントに戻る前に、mCamera.restartPreview() を呼び出して、ユーザーがスワイプして戻ってきた場合にカメラの準備が整っていることを確認します。
Android 4.x ではすべてがスムーズに動作しますが、これを 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());
}
}
};
およびメインフラグメントの 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の問題なのか、誰にも手がかりがありますか?