12

多くの標準的なカメラ アプリに付属しているのと同じように、タップしてフォーカスする機能を使用するカメラ アプリを作成しています。最初にタッチ イベントの (x,y) 座標を取得し、次にこの値を UI に渡します。次に、次のようにフォーカス エリアを設定します。

Rect newRect = new Rect(left,top,right, bottom);
Camera.Parameters params = mCamera.mCameraInstance.getParameters();
Camera.Area focusArea = new Camera.Area(newRect, 1000);
List<Camera.Area> focusAreas = new ArrayList<Camera.Area>();
focusAreas.add(focusArea);
params.setFocusAreas(focusAreas);

ただし、効果はないようです。そこで、いくつかの値を四角形にハードコードしました (このようにして、タッチ イベントから不適切な座標を排除できます)。 docs によると、空間 (-1000, -1000)(左上) から (1000, 1000)(右下) の座標を探しています。

そこで、上の長方形を次の長方形に置き換えました。

//should target a 100x100 square in the center of the screen
Rect newRect = new Rect(-50,-50,50, 50);

それでも、効果はないようです。まず、カメラアプリがそれを正常に使用し、params.getMaxNumFocusAreas() が 1 を返すため、カメラがフォーカス エリアの設定をサポートしていることを知っています。

過去にこれを使って成功した人がいたら教えてください!!

編集:

この API が Android 4.0 デバイス以降では機能しないことも示しているように見えるこの同様の質問を見つけました (4.1.1、Galaxy S3 でテストしています)。それでも、これらのデバイスのカメラ アプリには、タップしてフォーカスする機能がまだ確実に備わっています。私は何が欠けていますか???

4

3 に答える 3

0

ソース 4.3 ソースを熟読し、Camera API を数時間見つめた後、次の関数を見つけました。

public final void autoFocus (Camera.AutoFocusCallback cb)

したがって、コードに数行を追加できるはずです。

Rect newRect = new Rect(left,top,right, bottom);
Camera.Parameters params = mCamera.mCameraInstance.getParameters();
Camera.Area focusArea = new Camera.Area(newRect, 1000);
List<Camera.Area> focusAreas = new ArrayList<Camera.Area>();
focusAreas.add(focusArea);
params.setFocusAreas(focusAreas);

/**
 * ISO changes occurs passively after setting it in the cameraParams. Auto focus
 * parameters that have been set don't take affect until calling Camera.autoFocus()
 */
mCamera.autoFocus(new Camera.AutoFocusCallback()
{
    @Override
    public void onAutoFocus(boolean success, Camera camera)
    {
        Log.d(TAG, "onAutoFocus() " + success);
    }
});
于 2013-10-20T01:20:55.820 に答える
0

それは私にとってもうまくいきませんが、とにかく、四角形を設定するときは、それを確認して left < rightくださいtop < bottom! rect の高さを -100 に設定しています。そして、ところで、50x50 ではなく 100x-100 の正方形を設定します。

于 2013-04-18T09:31:51.267 に答える