如何在Android相机预览中绘制矩形

4

实际上,我不知道如何在相机预览中实现矩形。一切都运作良好,但我不知道如何像这个链接中的矩形边框放置。请有经验的人帮帮我。谢谢。


根据您在何处以及如何显示相机预览,请在显示预览的布局上添加一个ImageView,使用包含正方形的.png图像。 - CptEric
1个回答

3
我建议您在自定义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>

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


1
社区准则要求您发布您尝试过的内容。每个人都在尝试迎合您,但为了我们能够有效地帮助您,您需要展示一些已经做的工作。您不理解的是什么?您尝试过实现CapturePreview吗?您能在XML中添加它吗? - Quintin Balsdon
@Karandeep Atwal - 谢谢您的批评,但是您会看到我有一个LinearLayout覆盖在CamperPreview之上。问题要求一个矩形,虽然我可以重写onDraw()方法并访问像那样的画布,但这使得已经复杂的类更加复杂。而且一开始也没有要求使用画布。您完全可以尝试回答问题以满足“Miss A”的需求。 - Quintin Balsdon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接