Question

Je voudrais créer une application de capture photo / vidéo.

I ai créé une classe de CaptureView qui se prolonge SurfaceView et placé sous la forme principale.

L'activité de la principale forme a méthode onCreateOptionsMenu() qui crée un menu. Le menu a bien fonctionné mais j'ai essayé de mettre en œuvre une méthode onKeyDown:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

    if(event.getAction() == KeyEvent.ACTION_DOWN) {
        switch(keyCode) {
        case KeyEvent.KEYCODE_CAMERA:
            videoPreview.TakePicture();
            return true;
        }
    }

    return super.onKeyDown(keyCode, event);
}

Le menu ne semble pas plus et la méthode ne capture pas onKeyDown événement.

Quelqu'un sait-il ce qui pourrait être la raison de ce problème?

Était-ce utile?

La solution

Je trouve que je rentrais true pour tous les événements, où je ne suis RETOURNANT pour le code que j'utilisais. Je me suis déplacé le retour vrai à l'intérieur du cadre de la if déclaration et retour false sinon Cela a apporté mon menu retour!

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    super.onKeyDown(keyCode, event);
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        dba.close();
        Intent result = new Intent("Complete");
        setResult(Activity.RESULT_OK, result);
        finish();
        return true;
    }
    return false;
}

Autres conseils

J'ai eu un problème similaire et résolu en ajoutant

this.requestFocus();
this.setFocusableInTouchMode(true);

dans le constructeur de ma sous-classe SurfaceView.

i résolu la suppression de l'instruction if, comme ceci:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    switch(keyCode)
    {
        case KeyEvent.KEYCODE_CAMERA:
            videoPreview.TakePicture();
            return true;
    }
    return super.onKeyDown(keyCode, event);
}

Je ne sais pas pourquoi parfois ça ne marche pas, mais pour une de mes applications ce keyDown() fonctionne bien et encore quand je l'utilise pour une nouvelle application il ne fonctionne pas.

Mais j'ai une solution qui fonctionne toujours:

@Override
public boolean dispatchKeyEvent (KeyEvent event) {
    if (event.getAction()==KeyEvent.ACTION_DOWN && event.getKeyCode()==KeyEvent.KEYCODE_BACK) {
        Toast.makeText(this, "Back button pressed", Toast.LENGTH_LONG).show();
        return true;
    }
    return false;
}

I résolu ce problème en ajoutant en constructeur de ce code:

setFocusable(true);
requestFocus();

merci, Ciryon

Aussi chaque fois que je l'utilise setContentView(myView); je dois appeler myView.requestFocus();. S'il y a une meilleure solution s'il vous plaît me dire.

Eh bien, en regardant la documentation de l'API la seule chose qui se démarque est que l'androïde: cliquable attribut doit être aussi bien que la vue étant activé pour la méthode onKeyDown (...) pour travailler

.

vous pouvez essayer

this.setFocusable(true);

Votre activité pourrait être manger l'événement clé. Remplacer onKeyDown dans l'activité et jeter un point d'arrêt là-dedans.

Aussi: quand vous dites que vous avez « placé sous la forme principale » vous utilisez la mise en page XML ou faire dans votre code

?
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top