在 CameraX 的预览中绘制圆来描述 TapToFocus

Pea*_*ace 0 android android-camera android-camera2 android-camerax

我正在尝试使用 CameraX Api 实现 TapToFocus 功能。我已经成功实现了它,但不知道如何在描述用户按下的位置的预览上画一个圆圈。

我想在预览中有一个像图像一样的圆圈

Hus*_*eem 7

有多种方法可以围绕 上的点击位置绘制聚焦环并为其设置动画PreviewView,其中一些方法比其他方法更奇特。一种简单的方法是:

  1. 创建一个Drawable戒指,例如这样的东西。

  2. ImageView将包含 的布局Drawable在 的顶部PreviewView,并最初将其隐藏。

<FrameLayout ...>

    <androidx.camera.view.PreviewView
        ... />

    <ImageView
        android:id="@+id/focusRing"
        android:src="@drawable/focus_ring"
        android:visibility="invisible"
        ... />

</FrameLayout>
Run Code Online (Sandbox Code Playgroud)
  1. 在 上设置触摸侦听器PreviewView。在触摸事件中,使用事件的坐标来显示其周围的环。
private void animateFocusRing(float x, float y) {
    ImageView focusRing = findViewById(R.id.focusRing);

    // Move the focus ring so that its center is at the tap location (x, y)
    float width = focusRing.getWidth();
    float height = focusRing.getHeight();
    focusRing.setX(x - width / 2);
    focusRing.setY(y - height / 2);

    // Show focus ring
    focusRing.setVisibility(View.VISIBLE);
    focusRing.setAlpha(1F);

    // Animate the focus ring to disappear
    focusRing.animate()
        .setStartDelay(500)
        .setDuration(300)
        .alpha(0F)
        .setListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationEnd(Animator animator) {
                focusRing.setVisibility(View.INVISIBLE);
            }

            // The rest of AnimatorListener's methods.
        });
}
Run Code Online (Sandbox Code Playgroud)