3

私はオートフォーカス付きのカスタムカメラを構築していますが、ネイティブカメラと同じオートフォーカスの長方形のインジケーターを呼び出す方法があるのか​​、それとも最初から構築する必要があるのか​​、疑問に思っていました。例やチュートリアルのリンクは大変感謝しております。

4

2 に答える 2

11

最新のJellyBean4.2カメラがこれを処理する方法を確認すると役立つ場合があります。次のようにカメラソースをダウンロードできます。

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

コードを取得したら、FocusOverlayManagerクラスとクラスに移動しPieRendererます。この最新バージョンを試したことがない場合、フォーカスメーターは、フォーカスが完了すると回転するパイのような円になります。フォトショップで独自の正方形を作成するか、過去に使用した2つのうちの1つを使用できます(1つは私が作成したiPhoneのぼったくりで、もう1つはAndroidカメラの一部のバージョンで使用される9パッチです)。

ここに画像の説明を入力してください ここに画像の説明を入力してください

Jelly Beanの例は、探しているものに対して少し複雑になる可能性があるため、オートフォーカスの視覚的フィードバックを実装する方法のガイドラインを以下に示します。プロセスはやや複雑になる可能性があります。私は自分のやり方がこれを行うための最良の方法であるとは思いませんが、ここにあなたに一般的な考えを与えるいくつかのサンプルコードがあります...

私のカメラプレビューレイアウトxmlファイル:

<!-- 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>

このAutofocusCrosshairクラスは次のとおりです。

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);
    }

}

そして、私の活動でオートフォーカスを開始したいときは、次のことを行います。

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);

また、アニメーションの最後で画像をクリアするようにしてください。

mAutofocusAnimation.setAnimationListener(new AnimationListener() {
    @Override public void onAnimationEnd(Animation arg0) {
        mAutofocusCrosshair.clear();            
    }
    @Override public void onAnimationRepeat(Animation arg0) {}
    @Override public void onAnimationStart(Animation arg0) {}
});
于 2012-12-06T22:37:46.127 に答える
1

カメラアプリのプレビュー画面で色が変わる小さな長方形を意味するのであれば、それを自分で描く必要があると確信しています。それがあなたが望んでいた答えではない場合は申し訳ありません!

ただし、電話をかけるautoFocus()と、後でカメラの焦点が合っているかどうかを示す結果が表示されます。API 14以降、カメラがにある場合でも機能しFOCUS_MODE_CONTINUOUS_PICTUREます。

申し訳ありませんが、フォーカスメカニズムの使用について説明している優れたチュートリアルがわかりません。先週私が学んだことの1つはautoFocus()、プレビュー画像を開始する前に電話をかけないでください。HTCNexusOneがクラッシュするからです。

http://marakana.com/forums/android/examples/39.htmlのサンプルコードから最初のAndroidカメラアプリを作成しまし たが、そこに記述されているコードはすべてのプレビューフレームをSDカードに書き込み、すぐにいっぱいになります。そして、そこにはオートフォーカスに関するコードはありません。

編集:もちろん、フォーカスインジケーターを含む最終的なサンプルコードは、カメラアプリのソースコードに含まれています。この質問:Androidカメラアプリケーションのソースコードはどこで入手できますか?それを取得する方法を説明します。そこでの指示に従って、約35Mバイトのソースを取得しましたが、まだ小さな焦点の長方形を見つけていないのではないかと思います。

于 2012-12-06T22:26:33.723 に答える