Upload
bruno-delb
View
59
Download
2
Embed Size (px)
Citation preview
Développer sur AndroidAndroid Lab Test
www.AndroidLabTest.com
Face
bo
ok
Par Bruno Delb
www.youtube.com/androidlabtest
www.twitter.com/brunodelb | www.facebook.com/brunodelb | blog.brunodelb.com
www.facebook.com/Androidlabtest
You
tub
e
Site
off
icie
l
Leçon : La caméra, la prévisualisation
La caméra, la prévisualisation
• Dans cette leçon, vous allez apprendre à contrôler la
prévisualisation de la caméra.
• Pour cela, vous allez utiliser les classes Camera et
SurfaceView.
La caméra, la prévisualisation
• Ouvrez la caméra puis attachez la caméra au SurfaceHolder avec la méthode setPreviewDisplay().
Camera camera = Camera.open();camera.setPreviewDisplay(surfaceHolder);
• En cas de changement (orientation, …), changez la taille de prévisualisation avec la méthode setPreviewSize() et réactivez l’affichage avec la méthode startPreview().
Camera.Parameters parameters = camera.getParameters();parameters.setPreviewSize(w, h);camera.setParameters(parameters);camera.startPreview();
• A la fin, arrêtez l’affichage avec la méthode stopPreview().
camera.stopPreview();
La caméra, la prévisualisation
• Créez un SurfaceHolder étendant SurfaceView et implémentant Callback.
class Preview extends SurfaceView implements SurfaceHolder.Callback
• Récupérez une référence au holder avec la méthode getHolder().
SurfaceHolder surfaceHolder = getHolder();
• Sélectionnez le type de buffer par push SURFACE_TYPE_PUSH_BUFFERS avec la méthode setType().
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
La caméra, la prévisualisation
• Créez les callback surfaceCreated(), surfaceDestroyed() et
surfaceChanged().
surfaceHolder.addCallback(this);
public void surfaceCreated(SurfaceHolder holder) { /* setPreviewDisplay */ }
public void surfaceDestroyed(SurfaceHolder holder) { /* stopPreview */ }
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
// setPreviewSize et startPreview
}
Layout main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</LinearLayout>
Fichier Main.java
public class Main extends Activity {
private Preview preview;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
preview = new Preview(this);
setContentView(preview);
}
}
Fichier Preview.java
class Preview extends SurfaceView implements SurfaceHolder.Callback {
SurfaceHolder surfaceHolder;
Camera camera;
Preview(Context context) {
super(context);
surfaceHolder = getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
Fichier Preview.java
public void surfaceCreated(SurfaceHolder surfaceHolder) {
camera = Camera.open();
try {
camera.setPreviewDisplay(surfaceHolder);
} catch (IOException e) {
}
}
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
camera.stopPreview();
camera = null;
}
Fichier Preview.java
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
Camera.Parameters parameters = camera.getParameters();
parameters.setPreviewSize(w, h);
camera.setParameters(parameters);
camera.startPreview();
}
}
Projet AndroidManifest.xml
<uses-permission android:name="android.permission.CAMERA" />
Testez sur votre mobile
View_Camera_Preview
Retrouvez-moi sur ma chaîne AndroidLabTest …
Sur ma chaîne Youtubehttps://www.youtube.com/user/mobiledevlabtest
Qui suis-je ?
Bruno Delb,
auteur du 1er livre francophone de développement d’application Java sur mobile (2002),
développeur d’applications mobiles & sociales,
parlez-moi de vos projets.
Et bien sûr sur mon site Web :http://blog.brunodelb.com