これは非常私は実際に私のカメラのコードを持っても、削除エラーチェックと様々なコールバックで簡略化されています別のクラスで私は別のアプリケーションで使うことができますが、正しい方向に動かす必要はありません。私はここには表示していませんが、私はプレビューと1つの親コンテナにさまざまなオーバーレイを持っています、基本的なアンドロイドカメラのグリッチ以外の問題は一度もありませんでした(常に横向きでなければなりません。 。)
public class CameraActivity extends Activity {
private SurfaceView cameraSurface = null;
private myCamera camera = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.camerasurface);
cameraSurface = (SurfaceView) this.findViewById(R.id.cameraSurface);
camera = new bThereCamera(this,cameraSurface);
}
カメラの活動のためのXML
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<SurfaceView android:id="@+id/cameraSurface"
android:layout_height="fill_parent"
android:layout_width="fill_parent"/>
</RelativeLayout>
、非常に単純化されたカメラのクラス(カメラクラスは活動の存続期間にバインドされているので、コンテキストが渡されていると問題はないはずです)、これは単なる実装であるため、すべてを単一のクラスに沿って行うことはできません。すべてのコールバックはまた、あなたが本当に(それ以降のバージョンを取得する場合、それは非互換性のあるものを持っています)2.1のためのAndroidカメラアプリのバージョンをダウンロードしてカメラに掘るしたい場合は最低限
public class myCamera implements SurfaceHolder.Callback {
private Camera cameraDevice = null;
private SurfaceView cameraSurface = null;
private SurfaceHolder cameraSurfaceHolder = null;
public myCamera(CameraActivity activity, SurfaceView surface)
{
parent = activity;
cameraSurface = surface;
cameraSurfaceHolder = cameraSurface.getHolder();
cameraSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
cameraSurfaceHolder.addCallback(this);
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h)
{
Camera.Parameters params = cameraDevice.getParameters();
Camera.Size size = getBestPreviewSize(params,w,h);
if (size != null)
params.setPreviewSize(size.width, size.height);
cameraDevice.setParameters(params);
cameraDevice.startPreview();
}
public void surfaceCreated(SurfaceHolder holder)
{
try {
// Get the device interface
cameraDevice = Camera.open(); // This is different for 2.2 and 2.3+ you will need
// a mediator class if you want to use both ...
cameraDevice.setPreviewDisplay(cameraSurfaceHolder);
} catch (IOException e) { }
}
public void surfaceDestroyed(SurfaceHolder holder)
{
if (null == cameraDevice)
return;
cameraDevice.stopPreview();
cameraDevice.release();
cameraDevice = null;
}
public Camera.Size getBestPreviewSize(Camera.Parameters parameters, int w, int h)
{
Camera.Size result = null;
for (Camera.Size size : parameters.getSupportedPreviewSizes())
{
if (size.width <= w && size.height <= h)
{
if (null == result)
result = size;
else
{
int resultDelta = w - result.width + h - result.height;
int newDelta = w - size.width + h - size.height;
if (newDelta < resultDelta)
result = size;
}
}
}
return result;
}
除いて除去し、取るされています見て、彼らはプレビュー、キャプチャ、パフォーマンスなどに関していくつかの興味深いことを(ここには示されていません)行います。
これはかなり簡単なはずです。もしそうなら、彼らは何でしたか? – Idistic
私は市民のconnのような何かを試してみましたが、プレビューはありません、ただ黒い空きスペースです。 – fromvega