2

ViewGroupでCameraPreviewモードを使用するためのGoogleの例を使用しています。私はそれのアイデアが好きです、しかし私はそれの上にビューを配置しようとしています、そしてカメラは常にそれを置き換えます。カメラを取り外してその下の画像を表示しました(ビューが追加されていることを意味します。カメラを画像の下に配置し、bringChildToFront(myImageView)を100万回呼び出しても、カメラの下に追加されています。

public class CameraPreview extends ViewGroup implements SurfaceHolder.Callback {
private final String TAG = "Preview";

SurfaceView mSurfaceView;
SurfaceHolder mHolder;
Size mPreviewSize;
List<Size> mSupportedPreviewSizes;
Camera mCamera;
private DrawOnTop mDraw;
public ImageView myImageView;


 CameraPreview(Context context) {
    super(context);
    myImageView = new ImageView(context);
    Bitmap bmp = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher);
    Drawable drawable = new BitmapDrawable(bmp);
    myImageView.setImageDrawable(drawable);
    mSurfaceView = new SurfaceView(context);
    addView(mSurfaceView,0);
    addView(myImageView,1); 


    // Install a SurfaceHolder.Callback so we get notified when the
    // underlying surface is created and destroyed.
    mHolder = mSurfaceView.getHolder();
    mHolder.addCallback(this);



    Log.d("",drawable+"");
    bringChildToFront(myImageView);
    debug(2);
}

public void setCamera(Camera camera) {
    mCamera = camera;
    if (mCamera != null) {
        mSupportedPreviewSizes = mCamera.getParameters().getSupportedPreviewSizes();
        requestLayout();
    }

    bringChildToFront(myImageView);

}

public void switchCamera(Camera camera) {
   setCamera(camera);
   try {
       camera.setPreviewDisplay(mHolder);
   } catch (IOException exception) {
       Log.e(TAG, "IOException caused by setPreviewDisplay()", exception);
   }
   Camera.Parameters parameters = camera.getParameters();
   parameters.setPreviewSize(mPreviewSize.width, mPreviewSize.height);
   requestLayout();

   camera.setParameters(parameters);
   mSurfaceView.setBottom(0);
    bringChildToFront(myImageView);

}
 public void surfaceCreated(SurfaceHolder holder) {
    // The Surface has been created, acquire the camera and tell it where
    // to draw.
    try {
        if (mCamera != null) {
            mCamera.setPreviewDisplay(holder);
        }
    } catch (IOException exception) {
        Log.e(TAG, "IOException caused by setPreviewDisplay()", exception);
    }
    bringChildToFront(myImageView);

}
....

誰かアイデアはありますか?

4

1 に答える 1

2

答えは、ViewGroupが下から上に機能することです。つまり、0は実際には一番上に露出しているビューであり、一番下ではありません。注文を次の場所から切り替えました。

addView(mSurfaceView,0);
addView(myImageView,1); 

に:

addView(myImageView, 0);
addView(mSurfaceView, 1);

そして、それは画像を上に置きます。私はその単純な答えのためにこれに取り組むのにあまりにも多くの時間を費やしました。

于 2013-02-19T20:42:26.240 に答える