Draw selectively on preview, picture or video

pull/502/head
Mattia Iavarone 6 years ago
parent 573415323f
commit c3711743c5
  1. 15
      cameraview/src/main/java/com/otaliastudios/cameraview/overlay/OverlayLayout.java
  2. 17
      demo/src/main/java/com/otaliastudios/cameraview/demo/CameraActivity.java
  3. 4
      demo/src/main/res/layout/activity_camera.xml

@ -29,8 +29,19 @@ public class OverlayLayout extends FrameLayout implements Overlay {
private int target = DRAWING_PREVIEW; 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) { public OverlayLayout(@NonNull Context context) {
super(context); super(context);
setWillNotDraw(false);
} }
/** /**
@ -72,6 +83,7 @@ public class OverlayLayout extends FrameLayout implements Overlay {
*/ */
@Override @Override
public void draw(Canvas canvas) { public void draw(Canvas canvas) {
LOG.i("draw called. Setting DRAWING_PREVIEW and calling super.");
synchronized (this) { synchronized (this) {
target = DRAWING_PREVIEW; target = DRAWING_PREVIEW;
super.draw(canvas); super.draw(canvas);
@ -140,6 +152,9 @@ public class OverlayLayout extends FrameLayout implements Overlay {
|| (target == DRAWING_PICTURE && params.drawOnPictureSnapshot) || (target == DRAWING_PICTURE && params.drawOnPictureSnapshot)
); );
if (draw) { if (draw) {
LOG.v("Performing drawing for view:", child.getClass().getSimpleName(),
"target:", target,
"params:", params);
return super.drawChild(canvas, child, drawingTime); return super.drawChild(canvas, child, drawingTime);
} else { } else {
LOG.v("Skipping drawing for view:", child.getClass().getSimpleName(), LOG.v("Skipping drawing for view:", child.getClass().getSimpleName(),

@ -1,5 +1,6 @@
package com.otaliastudios.cameraview.demo; package com.otaliastudios.cameraview.demo;
import android.annotation.SuppressLint;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.os.Bundle; import android.os.Bundle;
@ -33,6 +34,7 @@ public class CameraActivity extends AppCompatActivity implements View.OnClickLis
private CameraView camera; private CameraView camera;
private ViewGroup controlPanel; private ViewGroup controlPanel;
// To show stuff in the callback // To show stuff in the callback
private long mCaptureTime; private long mCaptureTime;
@ -81,6 +83,8 @@ public class CameraActivity extends AppCompatActivity implements View.OnClickLis
b.setState(BottomSheetBehavior.STATE_HIDDEN); b.setState(BottomSheetBehavior.STATE_HIDDEN);
} }
}); });
syncWatermark();
} }
private void message(String content, boolean important) { private void message(String content, boolean important) {
@ -207,18 +211,25 @@ public class CameraActivity extends AppCompatActivity implements View.OnClickLis
private void toggleCamera() { private void toggleCamera() {
if (camera.isTakingPicture() || camera.isTakingVideo()) return; if (camera.isTakingPicture() || camera.isTakingVideo()) return;
TextView watermarkTitle = findViewById(R.id.watermark_title);
switch (camera.toggleFacing()) { switch (camera.toggleFacing()) {
case BACK: case BACK:
watermarkTitle.setText("Back facing");
message("Switched to back camera!", false); message("Switched to back camera!", false);
break; break;
case FRONT: case FRONT:
watermarkTitle.setText("Front facing");
message("Switched to front camera!", false); message("Switched to front camera!", false);
break; 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 @Override

@ -37,7 +37,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical"
android:layout_gravity="bottom|end" android:layout_gravity="bottom|end"
app:layout_drawOnPreview="false" app:layout_isOverlay="true"
app:layout_drawOnPreview="true"
app:layout_drawOnVideoSnapshot="true" app:layout_drawOnVideoSnapshot="true"
app:layout_drawOnPictureSnapshot="true" app:layout_drawOnPictureSnapshot="true"
android:gravity="center" android:gravity="center"
@ -50,7 +51,6 @@
android:id="@+id/watermark_title" android:id="@+id/watermark_title"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="CameraView"
android:textColor="@android:color/white" /> android:textColor="@android:color/white" />
</LinearLayout> </LinearLayout>

Loading…
Cancel
Save