looking for camera auto-focus indicator example

android, android-camera

Solution

It might be helpful to look at the way the most recent Jelly Bean 4.2 camera handles this. You can download the Camera source as follows:

git clone https://android.googlesource.com/platform/packages/apps/Camera.git

Once you have the code, navigate to the `FocusOverlayManager` class and the `PieRenderer` class. If you haven't tried out this newest version before, the focus meter is a pie-like circle that rotates upon focus completion. You can make your own square in photoshop or use one of these two that I have used in the past (one is an iPhone ripoff I made and the other is a nine-patch used in some version of the android camera):

The Jelly Bean example may be a little complicated for what you are looking for, so below are some guidelines for the way I implemented visual feedback for autofocus. The process can be somewhat complicated. I don't pretend my way is the best way to do this, but here is some example code that gives you the general idea...

In my camera preview layout xml file:

<!-- Autofocus crosshairs -->

<RelativeLayout
    android:id="@+id/af_casing"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_centerInParent="true"
    android:clipChildren="false" >

    <com.package.AutofocusCrosshair
        android:id="@+id/af_crosshair"
        android:layout_width="65dp"
        android:layout_height="65dp"
        android:clipChildren="false" >
    </com.package.AutofocusCrosshair>
</RelativeLayout>

This AutofocusCrosshair class is the following:

public class AutofocusCrosshair extends View {

    private Point mLocationPoint;

    public AutofocusCrosshair(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    private void setDrawable(int resid) {
        this.setBackgroundResource(resid);
    }

    public void showStart() {
        setDrawable(R.drawable.focus_crosshair_image);
    }

    public void clear() {
        setBackgroundDrawable(null);
    }

}

And when, in my activity, I want to start autofocus I do the following:

mAutofocusCrosshair = (AutofocusCrosshair) findViewById(R.id.af_crosshair);
//Now add your own code to position this within the view however you choose
mAutofocusCrosshair.showStart();
//I'm assuming you'll want to animate this... so start an animation here
findViewById(R.id.af_casing).startAnimation(mAutofocusAnimation);

And make sure at the end of your animation to clear the image:

mAutofocusAnimation.setAnimationListener(new AnimationListener() {
    @Override public void onAnimationEnd(Animation arg0) {
        mAutofocusCrosshair.clear();            
    }
    @Override public void onAnimationRepeat(Animation arg0) {}
    @Override public void onAnimationStart(Animation arg0) {}
});

Problem

I am building a custom camera with auto focus, and was merely wondering if there is a way to invoke the same auto-focus rectangular indicator that the native camera has or if i have to build that from scratch.. any examples or tutorial links would be greatly appreciated.

Original source

Related problems