9
votes

Prendre la capture d'écran

Je développe une demande de prise d'écran dans l'appareil. Dans cette application, nous pouvons tirer n'importe quoi sur l'écran. Pour cela, j'utilise de toile, de peinture et de chemin pour le faire.

J'utilise ce code pour prendre des captures d'écran: xxx

Cependant, lorsque la ligne suivante est exécutée : xxx

Mon application se ferme avec l'exception suivante: xxx

si je change la hauteur et la largeur, la capture d'écran est pris, mais c'est vide:

vide

Pourquoi est-ce que c'est événement? Qu'est-ce que je fais mal?


5 commentaires

Où appelez-vous Savescreenshot?


@Krishnabhadra qui est mon nom de méthode. Y a-t-il un problème avec ce nom de méthode?


J'ai demandé où avez-vous appelé Savescreenshot fonction? Est-ce à Oncreate (), OnResume ()?


Non, j'ai créé une option de menu. Et j'appelle là-bas.


Je pense que vous n'obtenez pas la bonne largeur et la bonne hauteur de la mise en page, vous pouvez l'obtenir dans la méthode Onlayout.


6 Réponses :


0
votes

GetWidth (), GetHeight () doit être appelé avec le contexte, si vous essayez de l'exercice extérieur, cela échouera. Essayez gettaplicationContext.getwidth ().


0 commentaires

3
votes

Exception est parce que la hauteur et la largeur de bitmap que vous créez est zéro

Essayez ci-dessous pour obtenir la hauteur et la largeur xxx

Dans le cas où il n'y a pas d'accès à getwindowManager xxx


4 commentaires

Oui, votre deuxième méthode fonctionne. Il faut une capture d'écran vide mais j'ai écrit un texte "Android" à l'écran.


Ce n'est pas lié à cette question, il y a un problème avec votre méthode de dessin


Pour cela, postez une question distincte vous postant ONDRAW et AOUDTOUCH


afficheur.getwidth () et display.Detieight () sont la mauvaise chose à utiliser; Celles-ci renvoient la taille réelle de l'affichage global, qui n'a aucune relation requise à la taille réelle de votre UI à l'écran.



18
votes

Vous pouvez le faire comme ça,

Donnez l'ID pour votre mise en page principale et après avoir affiché le contenu de l'écran, écrivez le code ci-dessous sur un lismetteur Sayez le bouton Cliquez sur l'élément de menu ou un tel écouteur (assurez-vous de vous assurer que vous Appelez ces lignes après l'affichage de votre mise en page, il donnera un écran vide). P>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
                                                               </uses-permission>


1 commentaires

+1, peut maintenant prendre la photo de l'écran de n'importe quelle vue / une disposition de mon écran de mon écran. En passant comme vue.



0
votes

Pourriez-vous montrer plus de votre code pls? Il semble que vous appeliez la largeur et la hauteur n'ont pas de valeurs entières positives. Vous pouvez déboguer cela en imprimant les valeurs de largeur et de hauteur.


1 commentaires

d'accord. Pouvez-vous imprimer les valeurs de largeur et de hauteur juste pour voir ce qu'ils contiennent après l'initialisation?



0
votes

J'ai fait face à un problème similaire et la solution était la suivante:

Vous obtenez une largeur et une largeur avant que votre vue ne soit nommée alors vérifiez d'abord si la largeur ou la hauteur égale zéro: p>

@Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {

        super.onSizeChanged(w, h, oldw, oldh);
        if(!isViewInitialized&&){
            // this is the right place to take snapshot :)
        }

    }


0 commentaires

-1
votes

J'ai enveloppé le code de capture d'écran dans une bibliothèque très simple. Il vous permet de prendre des captures d'écran et de les stocker sur le disque si vous le souhaitez.

https://github.com/abdallaHalaraby/Blink


0 commentaires