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