在描述 TapToFocus 的 CameraX 预览中画圆

Draw Circle in Preview in CameraX describing TapToFocus

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

I want to have a circle in the preview like the image has

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

  1. 制作一个Drawable的戒指,比如

  2. PreviewView 之上布局一个包含 DrawableImageView,并最初隐藏它。

<FrameLayout ...>

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

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

</FrameLayout>
  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.
        });
}