CameraPreview设置OutlineProvider不起作用,是什么原因,怎么修复
时间: 2023-06-14 08:07:40 浏览: 44
可能是因为你的View没有设置背景,OutlineProvider依赖于View的背景来绘制轮廓。你可以尝试设置一个透明的背景或者一个实心的颜色背景来解决这个问题。
如果你已经设置了背景但是依然不起作用,你可以尝试重写View的onSizeChanged方法,在方法中获取View的宽高,然后调用setOutlineProvider来重新设置轮廓。
示例代码如下:
```java
public class MyCameraPreview extends SurfaceView implements SurfaceHolder.Callback {
private Camera mCamera;
public MyCameraPreview(Context context, Camera camera) {
super(context);
mCamera = camera;
getHolder().addCallback(this);
setOutlineProvider(new ViewOutlineProvider() {
@Override
public void getOutline(View view, Outline outline) {
outline.setRect(0, 0, view.getWidth(), view.getHeight());
}
});
setClipToOutline(true);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
mCamera.setPreviewDisplay(holder);
mCamera.startPreview();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
if (holder.getSurface() == null) {
return;
}
try {
mCamera.stopPreview();
} catch (Exception e) {
e.printStackTrace();
}
try {
mCamera.setPreviewDisplay(holder);
mCamera.startPreview();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
mCamera.release();
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
setOutlineProvider(new ViewOutlineProvider() {
@Override
public void getOutline(View view, Outline outline) {
outline.setRect(0, 0, view.getWidth(), view.getHeight());
}
});
setClipToOutline(true);
}
}
```