gpt4 book ai didi

android-camera - 在 SurfaceView 上绘制矩形

转载 作者:行者123 更新时间:2023-12-04 11:23:49 29 4
gpt4 key购买 nike

我想知道如何绘制特定位置和大小的矩形。

我在这里和网上尝试了一些试验和示例,但没有任何效果对我有用。

我正在使用 SurfaceView 和 SurfaceHolder 来保存相机预览。

我只想在用户触摸屏幕时绘制一个矩形。

我不想使用外部库,当我试图从持有人那里获取 Canvas 时,我得到了空值。

现在没有代码,对我没有任何作用,如果有人知道如何去做,我会尝试。

这是我已经尝试过的:

Link 1

Link 2

Link 3

感谢帮助!

最佳答案

好的,感谢fadden,我找到了最简单的解决方案(至少对我而言)。

首先,我创建了另一个 Surface View ,我的 XML 文件如下所示:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scrollView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:tools="http://schemas.android.com/tools"
xmlns:opencv="http://schemas.android.com/apk/res-auto"
android:layout_gravity="left|top">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<SurfaceView
android:layout_alignParentTop="true"
android:id="@+id/CameraView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<SurfaceView
android:layout_alignParentTop="true"
android:id="@+id/TransparentView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
</RelativeLayout>

然后我为新表面创建了另一个持有人,这是我的 java 代码的一部分:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_video_capture);
// Create first surface with his holder(holder)
cameraView = (SurfaceView)findViewById(R.id.CameraView);
cameraView.setOnTouchListener(onTouchListner);

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

// Create second surface with another holder (holderTransparent)
transparentView = (SurfaceView)findViewById(R.id.TransparentView);

holderTransparent = transparentView.getHolder();
holderTransparent.setFormat(PixelFormat.TRANSPARENT);
holderTransparent.addCallback(callBack);
holderTransparent.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

最后我实现了一个名为“DrawFocusRect”的方法
private void DrawFocusRect(float RectLeft, float RectTop, float RectRight, float RectBottom, int color)
{

canvas = holderTransparent.lockCanvas();
canvas.drawColor(0,Mode.CLEAR);
//border's properties
paint = new Paint();
paint.setStyle(Paint.Style.STROKE);
paint.setColor(color);
paint.setStrokeWidth(3);
canvas.drawRect(RectLeft, RectTop, RectRight, RectBottom, paint);


holderTransparent.unlockCanvasAndPost(canvas);
}

正如你所看到的,我每次都清除 Canvas ,如果我不这样做,表面将另外显示更多的矩形。

这就是我从“OnTouchListener”事件调用此方法的方式:
OnTouchListener onTouchListner = new OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
RectLeft = event.getX() - 100;
RectTop = event.getY() - 100 ;
RectRight = event.getX() + 100;
RectBottom = event.getY() + 100;
DrawFocusRect(RectLeft , RectTop , RectRight , RectBottom , Color.BLUE);
}
};

希望这对其他人有帮助。

关于android-camera - 在 SurfaceView 上绘制矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25907615/

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