Improve overlay add/remove

pull/588/head
Mattia Iavarone 6 years ago
parent f1b29a0c48
commit 2fc7625fad
  1. 27
      cameraview/src/androidTest/java/com/otaliastudios/cameraview/CameraViewTest.java
  2. 11
      cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java
  3. 26
      docs/_posts/2019-07-14-watermarks-and-overlays.md

@ -930,6 +930,33 @@ public class CameraViewTest extends BaseTest {
verify(cameraView.mOverlayLayout, never()).addView(overlay, params);
}
@Test
public void testOverlays_removeOverlayView() {
// First add one.
cameraView.mOverlayLayout = spy(cameraView.mOverlayLayout);
View overlay = new View(getContext());
OverlayLayout.LayoutParams params = new OverlayLayout.LayoutParams(10, 10);
cameraView.addView(overlay, 0, params);
reset(cameraView.mOverlayLayout);
// Then remove.
cameraView.removeView(overlay);
verify(cameraView.mOverlayLayout, times(1)).isOverlay(params);
verify(cameraView.mOverlayLayout, times(1)).removeView(overlay);
}
@Test
public void testOverlays_dontRemoveOverlayView() {
// First add a view.
cameraView.mOverlayLayout = spy(cameraView.mOverlayLayout);
View notOverlay = new View(getContext());
ViewGroup.LayoutParams notOverlayParams = new ViewGroup.LayoutParams(10, 10);
cameraView.addView(notOverlay, notOverlayParams);
reset(cameraView.mOverlayLayout);
// Then remove.
cameraView.removeView(notOverlay);
verify(cameraView.mOverlayLayout, never()).removeView(notOverlay);
}
//endregion
// TODO: test permissions

@ -2202,7 +2202,6 @@ public class CameraView extends FrameLayout implements LifecycleObserver {
return super.generateLayoutParams(attributeSet);
}
// We don't support removeView on overlays for now.
@Override
public void addView(View child, int index, ViewGroup.LayoutParams params) {
if (!mInEditor && mOverlayLayout.isOverlay(params)) {
@ -2212,6 +2211,16 @@ public class CameraView extends FrameLayout implements LifecycleObserver {
}
}
@Override
public void removeView(View view) {
ViewGroup.LayoutParams params = view.getLayoutParams();
if (!mInEditor && params != null && mOverlayLayout.isOverlay(params)) {
mOverlayLayout.removeView(view);
} else {
super.removeView(view);
}
}
//endregion
//region Filters

@ -44,16 +44,30 @@ overlay with `findViewById` and:
- Change its position or appearance
- Do so while video is being recorded
Any changes in the overlay appearance will be recorded in real-time in the picture snapshot
or video snapshot that you are capturing.
Any changes in the overlay appearance will be recorded in real-time in the picture snapshot
or video snapshot that you are capturing.
As you can see in the example, you can also selectively choose, for each overlay, whether it
will draw on the preview (`layout_drawOnPreview`), on picture snapshots (`layout_drawOnPreview`),
on video snapshots (`layout_drawOnPreview`).
As you can see in the example, you can also selectively choose, for each overlay, whether it
will draw on the preview (`layout_drawOnPreview`), on picture snapshots (`layout_drawOnPreview`),
on video snapshots (`layout_drawOnPreview`).
### Advanced Usage
If you need to change these flags at runtime, you should cast the overlay `LayoutParams` as follows:
To add an overlay at runtime, simply use `addView()`, but make sure you pass in an instance of
`OverlayLayout.LayoutParams`:
```java
OverlayLayout.LayoutParams() params = new OverlayLayout.LayoutParams();
cameraView.addView(overlay, params);
```
To remove an overlay at runtime, simply use `removeView()`:
```java
cameraView.removeView(overlay);
```
To change the `layout_` flags at runtime, you should cast the overlay `LayoutParams` as follows:
```java
// Cast to OverlayLayout.LayoutParams

Loading…
Cancel
Save