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. 16
      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); 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 //endregion
// TODO: test permissions // TODO: test permissions

@ -2202,7 +2202,6 @@ public class CameraView extends FrameLayout implements LifecycleObserver {
return super.generateLayoutParams(attributeSet); return super.generateLayoutParams(attributeSet);
} }
// We don't support removeView on overlays for now.
@Override @Override
public void addView(View child, int index, ViewGroup.LayoutParams params) { public void addView(View child, int index, ViewGroup.LayoutParams params) {
if (!mInEditor && mOverlayLayout.isOverlay(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 //endregion
//region Filters //region Filters

@ -53,7 +53,21 @@ overlay with `findViewById` and:
### Advanced Usage ### 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 ```java
// Cast to OverlayLayout.LayoutParams // Cast to OverlayLayout.LayoutParams

Loading…
Cancel
Save