surfaceCreated n'est pas appelé
Je suis en train de mettre un aperçu de la caméra (SurfaceView) avec un bouton sur l'écran, mais tout ce que j'obtiens est un écran vide indiquant uniquement le bouton. Si je suis réglage de la SurfaceView que le seul contenu (avec setContentView(surfaceView) puis l'aperçu affiche bien à l'écran. Ce que je fais mal?
Merci d'avance
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="0px"
android:layout_weight="1">
<SurfaceView
android:id="@+id/camera_surface"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/trigger"
android:id="@+id/trigger_picture_button"
android:layout_gravity="bottom" />
</FrameLayout>
</LinearLayout>
Mon Activité:
public class CameraActivity extends Activity {
private SurfaceView cameraPreview;
private Button triggerPicture;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.camera);
cameraPreview = (SurfaceView) findViewById(R.id.camera_surface);
triggerPicture = (Button) findViewById(R.id.trigger_picture_button);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
cameraPreview = new CameraPreview(this);
// setContentView(cameraPreview);
}
Mon CameraPreview:
public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder holder;
private Camera camera;
public CameraPreview(Context context) {
super(context);
holder = getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void surfaceCreated(SurfaceHolder holder) {
camera = openFrontFacingCamera();
try {
camera.setPreviewDisplay(holder);
} catch (IOException e) {
camera.release();
camera = null;
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
camera.stopPreview();
camera.release();
camera = null;
}
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
Camera.Parameters parameters = camera.getParameters();
parameters.setPreviewSize(width, height);
parameters.set("orientation", "portrait");
camera.setParameters(parameters);
camera.startPreview();
}
private Camera openFrontFacingCamera() {
//returns Camera.open(
}
OriginalL'auteur Hans Muff | 2011-05-06
Vous devez vous connecter pour publier un commentaire.
Lorsque vous déclarez
SurfaceView
dans la mise en page que vous dites Android à utiliser intégré dans la classe. Ce que vous devez faire c'est utiliser votre classe en remplaçantSurfaceView
en XML avecyour.package.name.CameraPreview
.Une autre chose: vous devez ajouter un constructeur à l'
CameraPreview
prend des paramètresContext
etAttributeSet
, sinon la mise en page inflater ne serez pas en mesure de gonfler votre classe. Aussi, vous n'avez pas besoin de la ligne decameraPreview = new CameraPreview(this);
.OriginalL'auteur Malcolm
Lorsque votre onCreate() est la bonne, que vous écrasez le cameraPreview à partir du xml avec une nouvelle créa une laquelle vous n'ajoutez jamais de toute mise en page (dernière ligne). Cela signifie qu'elle est jamais gonflé, donc il n'y a jamais une surface créée.
OriginalL'auteur WarrenFaith
C'est peut-être un peu en retard de réponse ,mais il fonctionne vraiment pour moi.
1、définir la mise en page comme ci-dessous:
2、Dans onCreate:
3、Et dans Manifest.xml:
bien sûr , n'oubliez pas d'autorisations et de fonctionnalités.
Espérons que cela aide.
OriginalL'auteur ltzMaxwell