diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/overlay/OverlayLayout.java b/cameraview/src/main/java/com/otaliastudios/cameraview/overlay/OverlayLayout.java index 79195221..33c47037 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/overlay/OverlayLayout.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/overlay/OverlayLayout.java @@ -29,8 +29,19 @@ public class OverlayLayout extends FrameLayout implements Overlay { private int target = DRAWING_PREVIEW; + /** + * We set {@link #setWillNotDraw(boolean)} to false even if we don't draw anything. + * This ensures that the View system will call {@link #draw(Canvas)} on us instead + * of short-circuiting to {@link #dispatchDraw(Canvas)}. + * + * That would be a problem for us since we use {@link #draw(Canvas)} to understand if + * we are currently drawing on the preview or not. + * + * @param context a context + */ public OverlayLayout(@NonNull Context context) { super(context); + setWillNotDraw(false); } /** @@ -72,6 +83,7 @@ public class OverlayLayout extends FrameLayout implements Overlay { */ @Override public void draw(Canvas canvas) { + LOG.i("draw called. Setting DRAWING_PREVIEW and calling super."); synchronized (this) { target = DRAWING_PREVIEW; super.draw(canvas); @@ -140,6 +152,9 @@ public class OverlayLayout extends FrameLayout implements Overlay { || (target == DRAWING_PICTURE && params.drawOnPictureSnapshot) ); if (draw) { + LOG.v("Performing drawing for view:", child.getClass().getSimpleName(), + "target:", target, + "params:", params); return super.drawChild(canvas, child, drawingTime); } else { LOG.v("Skipping drawing for view:", child.getClass().getSimpleName(), diff --git a/demo/src/main/java/com/otaliastudios/cameraview/demo/CameraActivity.java b/demo/src/main/java/com/otaliastudios/cameraview/demo/CameraActivity.java index 81136d88..39e5c39c 100644 --- a/demo/src/main/java/com/otaliastudios/cameraview/demo/CameraActivity.java +++ b/demo/src/main/java/com/otaliastudios/cameraview/demo/CameraActivity.java @@ -1,5 +1,6 @@ package com.otaliastudios.cameraview.demo; +import android.annotation.SuppressLint; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Bundle; @@ -33,6 +34,7 @@ public class CameraActivity extends AppCompatActivity implements View.OnClickLis private CameraView camera; private ViewGroup controlPanel; + // To show stuff in the callback private long mCaptureTime; @@ -81,6 +83,8 @@ public class CameraActivity extends AppCompatActivity implements View.OnClickLis b.setState(BottomSheetBehavior.STATE_HIDDEN); } }); + + syncWatermark(); } private void message(String content, boolean important) { @@ -207,18 +211,25 @@ public class CameraActivity extends AppCompatActivity implements View.OnClickLis private void toggleCamera() { if (camera.isTakingPicture() || camera.isTakingVideo()) return; - TextView watermarkTitle = findViewById(R.id.watermark_title); switch (camera.toggleFacing()) { case BACK: - watermarkTitle.setText("Back facing"); message("Switched to back camera!", false); break; case FRONT: - watermarkTitle.setText("Front facing"); message("Switched to front camera!", false); break; } + syncWatermark(); + } + + @SuppressLint("SetTextI18n") + private void syncWatermark() { + TextView watermark = findViewById(R.id.watermark_title); + switch (camera.getFacing()) { + case FRONT: watermark.setText("Front Camera"); break; + case BACK: watermark.setText("Back Camera"); break; + } } @Override diff --git a/demo/src/main/res/layout/activity_camera.xml b/demo/src/main/res/layout/activity_camera.xml index 622e8d3a..d58a30f1 100644 --- a/demo/src/main/res/layout/activity_camera.xml +++ b/demo/src/main/res/layout/activity_camera.xml @@ -37,7 +37,8 @@ android:layout_height="wrap_content" android:orientation="vertical" android:layout_gravity="bottom|end" - app:layout_drawOnPreview="false" + app:layout_isOverlay="true" + app:layout_drawOnPreview="true" app:layout_drawOnVideoSnapshot="true" app:layout_drawOnPictureSnapshot="true" android:gravity="center" @@ -50,7 +51,6 @@ android:id="@+id/watermark_title" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="CameraView" android:textColor="@android:color/white" />