android - 如何在android中的相机预览中绘制矩形

标签 android overlay qr-code

其实我不明白如何在相机预览上实现矩形。一切正常,但我不知道如何像这样放置矩形边框 link .请任何人帮助我。谢谢。

最佳答案

我建议您在自定义 SurfaceView 中实现相机预览,然后在您的 XML 中您可以简单地覆盖矩形,就像这里接受的答案一样:

Android: Overlay on Android Camera Preview

因此,将 Java 文件添加到您的项目中:

public class CapturePreview extends SurfaceView implements SurfaceHolder.Callback{

    public static Bitmap mBitmap;
    SurfaceHolder holder;
    static Camera mCamera;

    public CapturePreview(Context context, AttributeSet attrs) {
    super(context, attrs);

        holder = getHolder();
        holder.addCallback(this);
        holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {

        Camera.Parameters parameters = mCamera.getParameters();
        parameters.getSupportedPreviewSizes();
        mCamera.setParameters(parameters);
        mCamera.startPreview();
    }
    @Override
    public void surfaceCreated(SurfaceHolder holder) {

        try {
            mCamera = Camera.open();
            mCamera.setPreviewDisplay(holder);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        mCamera.stopPreview();
        mCamera.release();
    }

    public static void takeAPicture(){  

        Camera.PictureCallback mPictureCallback = new PictureCallback() {
            @Override
            public void onPictureTaken(byte[] data, Camera camera) {

                BitmapFactory.Options options = new BitmapFactory.Options();
                mBitmap = BitmapFactory.decodeByteArray(data, 0, data.length, options);
            }
        };
        mCamera.takePicture(null, null, mPictureCallback);
    }
}

请注意,您必须确保它具有适当的包名称。

然后更改您的主要 XML 文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent">

  <[PACKAGE_NAME].CapturePreview 
      android:layout_width="match_parent"
      android:layout_height="match_parent"/>


  <LinearLayout 
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:background:"#55999999"
      android:padding:"30dp"
      android:gravity="center">

  </LinearLayout>  

</RelativeLayout>

这应该在相机预览上有一个透明的矩形。

关于android - 如何在android中的相机预览中绘制矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31802948/

相关文章:

android - 显示可视化组件而不引用 Context

android - 根据列表项更改上下文菜单文本

javascript - 如何将多个图像直接堆叠在一起?

android - 在android中动态填充 map

iphone - iOS 下的 ZXing 不能在模拟器中运行

适配器中的Android帧动画

android - 如何在Android Studio和IntelliJ中安装flutter和dart?

html - 网站全屏覆盖

c# - 临时将PDF转为图片,方便阅读二维码

ios - "Scan now to download"iPhone App 下载二维码