diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java
index 614ea578..e68a0b74 100644
--- a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java
+++ b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java
@@ -35,7 +35,7 @@ import com.otaliastudios.cameraview.controls.Control;
import com.otaliastudios.cameraview.controls.ControlParser;
import com.otaliastudios.cameraview.controls.Facing;
import com.otaliastudios.cameraview.controls.Flash;
-import com.otaliastudios.cameraview.draw.MarkerLayout;
+import com.otaliastudios.cameraview.markers.MarkerLayout;
import com.otaliastudios.cameraview.engine.Camera1Engine;
import com.otaliastudios.cameraview.engine.CameraEngine;
import com.otaliastudios.cameraview.frame.Frame;
@@ -57,6 +57,7 @@ import com.otaliastudios.cameraview.internal.GridLinesLayout;
import com.otaliastudios.cameraview.internal.utils.CropHelper;
import com.otaliastudios.cameraview.internal.utils.OrientationHelper;
import com.otaliastudios.cameraview.internal.utils.WorkerHandler;
+import com.otaliastudios.cameraview.markers.MarkerParser;
import com.otaliastudios.cameraview.preview.CameraPreview;
import com.otaliastudios.cameraview.preview.GlCameraPreview;
import com.otaliastudios.cameraview.preview.SurfaceCameraPreview;
@@ -66,8 +67,8 @@ import com.otaliastudios.cameraview.size.Size;
import com.otaliastudios.cameraview.size.SizeSelector;
import com.otaliastudios.cameraview.size.SizeSelectorParser;
import com.otaliastudios.cameraview.size.SizeSelectors;
-import com.otaliastudios.cameraview.draw.AutoFocusMarker;
-import com.otaliastudios.cameraview.draw.AutoFocusTrigger;
+import com.otaliastudios.cameraview.markers.AutoFocusMarker;
+import com.otaliastudios.cameraview.markers.AutoFocusTrigger;
import java.io.File;
import java.util.ArrayList;
@@ -159,6 +160,7 @@ public class CameraView extends FrameLayout implements LifecycleObserver {
// Size selectors and gestures
SizeSelectorParser sizeSelectors = new SizeSelectorParser(a);
GestureParser gestures = new GestureParser(a);
+ MarkerParser markers = new MarkerParser(a);
a.recycle();
@@ -208,6 +210,9 @@ public class CameraView extends FrameLayout implements LifecycleObserver {
mapGesture(Gesture.SCROLL_HORIZONTAL, gestures.getHorizontalScrollAction());
mapGesture(Gesture.SCROLL_VERTICAL, gestures.getVerticalScrollAction());
+ // Apply markers
+ setAutoFocusMarker(markers.getAutoFocusMarker());
+
if (!isInEditMode()) {
mOrientationHelper = new OrientationHelper(context, mCameraCallbacks);
}
diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/gesture/GestureAction.java b/cameraview/src/main/java/com/otaliastudios/cameraview/gesture/GestureAction.java
index 2ad296c7..32146389 100644
--- a/cameraview/src/main/java/com/otaliastudios/cameraview/gesture/GestureAction.java
+++ b/cameraview/src/main/java/com/otaliastudios/cameraview/gesture/GestureAction.java
@@ -2,7 +2,7 @@ package com.otaliastudios.cameraview.gesture;
import com.otaliastudios.cameraview.CameraView;
-import com.otaliastudios.cameraview.draw.AutoFocusMarker;
+import com.otaliastudios.cameraview.markers.AutoFocusMarker;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/draw/AutoFocusMarker.java b/cameraview/src/main/java/com/otaliastudios/cameraview/markers/AutoFocusMarker.java
similarity index 86%
rename from cameraview/src/main/java/com/otaliastudios/cameraview/draw/AutoFocusMarker.java
rename to cameraview/src/main/java/com/otaliastudios/cameraview/markers/AutoFocusMarker.java
index 253bd835..35f5f9de 100644
--- a/cameraview/src/main/java/com/otaliastudios/cameraview/draw/AutoFocusMarker.java
+++ b/cameraview/src/main/java/com/otaliastudios/cameraview/markers/AutoFocusMarker.java
@@ -1,14 +1,10 @@
-package com.otaliastudios.cameraview.draw;
+package com.otaliastudios.cameraview.markers;
-import android.content.Context;
import android.graphics.PointF;
-import android.view.View;
import com.otaliastudios.cameraview.CameraView;
import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.annotation.UiThread;
/**
* A marker for the autofocus operations. Receives callback when focus starts,
diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/draw/AutoFocusTrigger.java b/cameraview/src/main/java/com/otaliastudios/cameraview/markers/AutoFocusTrigger.java
similarity index 90%
rename from cameraview/src/main/java/com/otaliastudios/cameraview/draw/AutoFocusTrigger.java
rename to cameraview/src/main/java/com/otaliastudios/cameraview/markers/AutoFocusTrigger.java
index 6f745f3e..b4a5fc93 100644
--- a/cameraview/src/main/java/com/otaliastudios/cameraview/draw/AutoFocusTrigger.java
+++ b/cameraview/src/main/java/com/otaliastudios/cameraview/markers/AutoFocusTrigger.java
@@ -1,4 +1,4 @@
-package com.otaliastudios.cameraview.draw;
+package com.otaliastudios.cameraview.markers;
import com.otaliastudios.cameraview.CameraView;
import com.otaliastudios.cameraview.gesture.GestureAction;
diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/draw/DefaultAutoFocusMarker.java b/cameraview/src/main/java/com/otaliastudios/cameraview/markers/DefaultAutoFocusMarker.java
similarity index 96%
rename from cameraview/src/main/java/com/otaliastudios/cameraview/draw/DefaultAutoFocusMarker.java
rename to cameraview/src/main/java/com/otaliastudios/cameraview/markers/DefaultAutoFocusMarker.java
index 236257eb..ef7b5ffa 100644
--- a/cameraview/src/main/java/com/otaliastudios/cameraview/draw/DefaultAutoFocusMarker.java
+++ b/cameraview/src/main/java/com/otaliastudios/cameraview/markers/DefaultAutoFocusMarker.java
@@ -1,4 +1,4 @@
-package com.otaliastudios.cameraview.draw;
+package com.otaliastudios.cameraview.markers;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
@@ -7,8 +7,6 @@ import android.graphics.PointF;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.FrameLayout;
-import android.widget.ImageView;
import com.otaliastudios.cameraview.R;
diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/draw/Marker.java b/cameraview/src/main/java/com/otaliastudios/cameraview/markers/Marker.java
similarity index 92%
rename from cameraview/src/main/java/com/otaliastudios/cameraview/draw/Marker.java
rename to cameraview/src/main/java/com/otaliastudios/cameraview/markers/Marker.java
index 8b1e3d2b..db3baa0e 100644
--- a/cameraview/src/main/java/com/otaliastudios/cameraview/draw/Marker.java
+++ b/cameraview/src/main/java/com/otaliastudios/cameraview/markers/Marker.java
@@ -1,7 +1,6 @@
-package com.otaliastudios.cameraview.draw;
+package com.otaliastudios.cameraview.markers;
import android.content.Context;
-import android.graphics.PointF;
import android.view.View;
import android.view.ViewGroup;
diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/draw/MarkerLayout.java b/cameraview/src/main/java/com/otaliastudios/cameraview/markers/MarkerLayout.java
similarity index 97%
rename from cameraview/src/main/java/com/otaliastudios/cameraview/draw/MarkerLayout.java
rename to cameraview/src/main/java/com/otaliastudios/cameraview/markers/MarkerLayout.java
index 0462d9de..8c2d8c97 100644
--- a/cameraview/src/main/java/com/otaliastudios/cameraview/draw/MarkerLayout.java
+++ b/cameraview/src/main/java/com/otaliastudios/cameraview/markers/MarkerLayout.java
@@ -1,4 +1,4 @@
-package com.otaliastudios.cameraview.draw;
+package com.otaliastudios.cameraview.markers;
import android.annotation.SuppressLint;
import android.content.Context;
diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/markers/MarkerParser.java b/cameraview/src/main/java/com/otaliastudios/cameraview/markers/MarkerParser.java
new file mode 100644
index 00000000..a478617f
--- /dev/null
+++ b/cameraview/src/main/java/com/otaliastudios/cameraview/markers/MarkerParser.java
@@ -0,0 +1,41 @@
+package com.otaliastudios.cameraview.markers;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+
+import com.otaliastudios.cameraview.R;
+import com.otaliastudios.cameraview.controls.Audio;
+import com.otaliastudios.cameraview.controls.Facing;
+import com.otaliastudios.cameraview.controls.Flash;
+import com.otaliastudios.cameraview.controls.Grid;
+import com.otaliastudios.cameraview.controls.Hdr;
+import com.otaliastudios.cameraview.controls.Mode;
+import com.otaliastudios.cameraview.controls.Preview;
+import com.otaliastudios.cameraview.controls.VideoCodec;
+import com.otaliastudios.cameraview.controls.WhiteBalance;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+/**
+ * Parses markers from XML attributes.
+ */
+public class MarkerParser {
+
+ private AutoFocusMarker autoFocusMarker = null;
+
+ public MarkerParser(@NonNull TypedArray array) {
+ String autoFocusName = array.getString(R.styleable.CameraView_cameraAutoFocusMarker);
+ if (autoFocusName != null) {
+ try {
+ Class> autoFocusClass = Class.forName(autoFocusName);
+ autoFocusMarker = (AutoFocusMarker) autoFocusClass.newInstance();
+ } catch (Exception ignore) { }
+ }
+ }
+
+ @Nullable
+ public AutoFocusMarker getAutoFocusMarker() {
+ return autoFocusMarker;
+ }
+}
diff --git a/cameraview/src/main/res/values/attrs.xml b/cameraview/src/main/res/values/attrs.xml
index 912b328b..eac133e8 100644
--- a/cameraview/src/main/res/values/attrs.xml
+++ b/cameraview/src/main/res/values/attrs.xml
@@ -30,13 +30,13 @@
-
+
-
+
@@ -124,5 +124,7 @@
+
+
\ No newline at end of file
diff --git a/cameraview/src/main/res/values/strings.xml b/cameraview/src/main/res/values/strings.xml
new file mode 100644
index 00000000..dd25e92b
--- /dev/null
+++ b/cameraview/src/main/res/values/strings.xml
@@ -0,0 +1,4 @@
+
+
+ com.otaliastudios.cameraview.markers.DefaultAutoFocusMarker
+
\ No newline at end of file
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 97e4245c..016a405a 100644
--- a/demo/src/main/java/com/otaliastudios/cameraview/demo/CameraActivity.java
+++ b/demo/src/main/java/com/otaliastudios/cameraview/demo/CameraActivity.java
@@ -20,7 +20,6 @@ import com.otaliastudios.cameraview.CameraView;
import com.otaliastudios.cameraview.PictureResult;
import com.otaliastudios.cameraview.controls.Mode;
import com.otaliastudios.cameraview.VideoResult;
-import com.otaliastudios.cameraview.draw.DefaultAutoFocusMarker;
import java.io.File;
@@ -42,7 +41,6 @@ public class CameraActivity extends AppCompatActivity implements View.OnClickLis
camera = findViewById(R.id.camera);
camera.setLifecycleOwner(this);
camera.addCameraListener(new Listener());
- camera.setAutoFocusMarker(new DefaultAutoFocusMarker());
findViewById(R.id.edit).setOnClickListener(this);
findViewById(R.id.capturePicture).setOnClickListener(this);
diff --git a/demo/src/main/res/layout/activity_camera.xml b/demo/src/main/res/layout/activity_camera.xml
index f3ea81c8..2c30c12d 100644
--- a/demo/src/main/res/layout/activity_camera.xml
+++ b/demo/src/main/res/layout/activity_camera.xml
@@ -21,12 +21,13 @@
app:cameraGrid="off"
app:cameraFlash="off"
app:cameraAudio="on"
- app:cameraGestureTap="autofocus"
+ app:cameraGestureTap="autoFocus"
app:cameraGestureLongTap="none"
app:cameraGesturePinch="zoom"
app:cameraGestureScrollHorizontal="exposureCorrection"
app:cameraGestureScrollVertical="none"
- app:cameraMode="picture" />
+ app:cameraMode="picture"
+ app:cameraAutoFocusMarker="@string/cameraview_default_autofocus_marker"/>