如何解决需要在CameraX for Android中添加网格线
需要将网格添加到Custome Camera模块中的CameraX API。我们已经使用PreviewView来显示Camera流。还创建了从PreviewView扩展的CustomePreviewView,以绘制网格线。但是在相机预览开始流式传输之前,该网格线暂时可见。
公共类CustomePreviewView扩展了PreviewView {
public CustomePreviewView(@NonNull Context context) {
super(context);
this.setWillNotDraw(false);
}
public CustomePreviewView(@NonNull Context context,@Nullable AttributeSet attrs) {
super(context,attrs);
this.setWillNotDraw(false);
}
public CustomePreviewView(@NonNull Context context,@Nullable AttributeSet attrs,int defStyleAttr) {
super(context,attrs,defStyleAttr);
this.setWillNotDraw(false);
}
public CustomePreviewView(@NonNull Context context,int defStyleAttr,int defStyleRes) {
super(context,defStyleAttr,defStyleRes);
this.setWillNotDraw(false);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
int screenWidth = metrics.widthPixels;
int screenHeight = (int) (metrics.heightPixels*0.9);
// Set paint options
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setStrokeWidth(3);
paint.setStyle(Paint.Style.STROKE);
paint.setColor(Color.argb(255,255,255));
canvas.drawLine((screenWidth/3)*2,(screenWidth/3)*2,screenHeight,paint);
canvas.drawLine((screenWidth/3),(screenWidth/3),paint);
canvas.drawLine(0,(screenHeight/3)*2,screenWidth,(screenHeight/3),paint);
}
}
及以下是setPreview用例。
private Preview setPreview() {
Rational aspectRatio = new Rational(previewView.getWidth(),previewView.getHeight());
Size screen = new Size(previewView.getWidth(),previewView.getHeight()); //size of the scree
if(preview!=null) {
preview.clear();
}
preview = new Preview.Builder().setTargetResolution(screen).setTargetAspectRatioCustom(aspectRatio).build();
preview.setSurfaceProvider(previewView.createSurfaceProvider());
return preview;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。