gpt4 book ai didi

android - 使用 View 组将 ImageView 置于相机预览模式

转载 作者:行者123 更新时间:2023-11-29 00:31:57 24 4
gpt4 key购买 nike

我正在使用 Google 的示例,通过在 ViewGroup 中使用它来使用 CameraPreview 模式。我喜欢它的想法,但我试图在它上面放置 View ,而相机总是取代它。我删除了相机以查看它下方的图像(这意味着正在添加 View ,它只是添加在相机下方,即使我将相机放在图像下方并调用 bringChildToFront(myImageView) 一百万次。

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);

}
....

有人有什么想法吗?

最佳答案

答案是 ViewGroup 是自下而上工作的。这意味着 0 实际上是最暴露的 View ,而不是底部。我把顺序从:

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

收件人:

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

它把图像放在最上面。为了这个简单的答案,我花了太多时间在这上面。

关于android - 使用 View 组将 ImageView 置于相机预览模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14966144/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com