Hallo,
ich bin gerade dabei eine Androide app zu erstellen, welche eine Kamera beinhaltet. Die Kamera app will ich nicht benutzen, da sonst meine App gekillt wird und neu gestartet wird, also hab ich mich über die api informiert.
Was ich jetzt hab.
Ich habe eine SurfaceView und die dazu benötigten Buttons.
Im Surfaceview wird die Kamera angezeigt und ein Bild geschossen.
Das Bild wird im Preview angezeigt.
Es gibt ein Focus on Touch und hier ist mein Problem.
Ich möchte ja, das jeder sieht wo er Fokussiert und möchte dazu ein Viereck an die stelle zeichnen, welches dann grün bei succes und rot bei failure gefärbt wird.
der onTouchListener steht bereits und ich habe die nötigen Koordinaten, jedoch weis nicht wie ich das Viereck gezeichnet bekomme.
Alle Beispiele im Netz sagen immer setContentView in der Activity usw. aber das geht ja so nicht.
main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >
<SurfaceView
android:id="@+id/camerapreview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1" />
<LinearLayout
android:layout_width="54dp"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/btnCancel"
style="@style/AppTheme"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Cancel"
android:textSize="9dip" />
<View
android:layout_width="wrap_content"
android:layout_height="0dip"
android:layout_weight="1" />
<Button
android:id="@+id/btnSave"
style="@style/AppTheme"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Save"
android:textSize="9dip" />
<Button
android:id="@+id/btnCapture"
style="@style/AppTheme"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Cap"
android:textSize="9dip" />
<View
android:layout_width="wrap_content"
android:layout_height="0dip"
android:layout_weight="1" />
<Button
android:id="@+id/btnRetake"
style="@style/AppTheme"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Retake"
android:textSize="9dip" />
</LinearLayout>
</LinearLayout>
Alles anzeigen
Der Save und Remake button wird ausgeblendet solange nicht das Fotogeschossen wurde und der Cap Button wird ausgeblendet beim Preview.
ausschnitt aus der onCreate function in meiner Activity.
surfaceView = (SurfaceView)findViewById(R.id.camerapreview);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
surfaceView.setOnTouchListener(new SurfaceView.OnTouchListener(){
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
int x = (int)event.getX();
int y = (int)event.getY();
Log.e("CAM","X: "+x);
Log.e("CAM","Y: " +y);
Log.e("CAM","ACTION:" +event.getAction());
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
// draw rect
Log.e("CAM","DOWN");
return true;
case MotionEvent.ACTION_MOVE:
// move rect set methode x, y, x +20, y + 20);
Log.e("CAM","MOVE");
return true;
case MotionEvent.ACTION_UP:
Log.e("CAM","UP");
// giv the rect and make the color green for succes and red for failure
// autofocus should hield on the tapped coordinations, lighten and darken should be supportet.
AutoFocusCallback autoFocusCallBack = new AutoFocusCallback();
camera.autoFocus(autoFocusCallBack);
return true;
}
return false;
}
}
);
Alles anzeigen
kleiner tipp oder Denkanstoß würde mich schon glücklich machen, aber ich mache das alles zum ersten mal.
Desweitere will ich auch nur an der stelle Fokussieren die man drückt.
Ich benutze das HTC Desire HD und die eingehen Kamera kann das auch. API 2.3.5
Funktioniert das hier schon mit Focus Areas?