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;
/**
* 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(),

@ -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

@ -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" />
</LinearLayout>

Loading…
Cancel
Save