Andorid Entwicklung: Bild von Kamera in ImageView holen

Vorbereitung:

Es muss ein Layout geben (hier photo.xml), das eine ImageView und einen Button enthält. Die ImageView habe ich iv genannt. Der Button heißt buttonCamera. In meiner Java-Klasse heißt die ImageView auch iv. Der Button heißt b. Die Klasse muss View.OnClickListener implementiert haben.
Zudem gibt es noch eine Variable cameraData als Int. Diese nimmt das Bild dann in sich auf. Außerdem brauchen wir einen Intent, den ich i genannt habe.
Wie das aussieht sieht man hier:

public class Camera extends Activity implements View.OnClickListener

Die Variablen sind die folgenden:

Button b;
 ImageView iv;
 Intent i;
 final static int cameraData = 0;
 Bitmap bmp;

Die onCreate Methode sieht folgendermaßen aus:

protected void onCreate(Bundle savedInstanceState) 
{
  super.onCreate(savedInstanceState);
  setContentView(R.layout.photo);
  iv = (ImageView) findViewById (R.id.iv);
  b = (Button) findViewById (R.id.b);
  b.setOnClickListener(this);
}

Nun brauchen wir noch eine onClick Methode die den Button mit Funktionalität versorgt:

public void onClick(View v) 
{
 switch(v.getId())
 {
   case R.id.b:
   i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
   startActivityForResult(i, cameraData);
   break;
 }
}

Dabei sieht man, dass falls R.id.b (was dem Button entspricht) aufgerufen wird, der Intent i mit der internen Android Funktion ACTION_IMAGE_CAPTURE gefüllt wird. Diese wird dann nicht wie ein normaler Intent mit startActivity(intentname) aufgerufen, da wir ja einen Rückgabewert benötigen. Daher wird der Intent i mit startActivityForResult aufgerufen, wobei man neben dem Intent i selber auch noch eine Variable für den Rückgabewert mitgibt.

Zuletzt müssen wir den Wert noch abgreifen und in die ImageView iv schreiben:

protected void onActivityResult(int requestCode, int resultCode, Intent data){

 super.onActivityResult(requestCode, resultCode, data);
 if(resultCode == RESULT_OK)
 {
   Bundle extras = data.getExtras();
   bmp = (Bitmap) extras.get("data");
   iv.setImageBitmap(bmp);
 }
}

Die Methode onActivityResult kann man sich reinkopieren oder von Eclipse erstellen lassen. Darin fängt man ganz einfach mit der Abfrage resultCode == RESULT_OK ab, ob die Rückgabe ohne Probleme stattgefunden hat. Wenn dem so ist, holt sich der folgende Zweizeiler das Bild aus der Variable data und schreibt sie als Bild in bmp. Zuletzt wird die ImageView noch mit dem Bild belegt.

Bitte beachten: Das Android SDK und dessen Emulator spielen bei der Verwendung der Kamera nicht immer mit. Im Zweifel einfach als .apk auf das Handy installieren und da testen.

  1. No trackbacks yet.

Du musst angemeldet sein, um einen Kommentar abzugeben.
%d Bloggern gefällt das: