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: p> Cependant, lorsque la ligne suivante est exécutée : p> Mon application se ferme avec l'exception suivante: p> si je change la hauteur et la largeur, la capture d'écran est pris, mais c'est vide: p> p> Pourquoi est-ce que c'est événement? Qu'est-ce que je fais mal? P> p>
6 Réponses :
GetWidth (), GetHeight () doit être appelé avec le contexte, si vous essayez de l'exercice extérieur, cela échouera. Essayez gettaplicationContext.getwidth (). P>
Exception est parce que la hauteur et la largeur de Essayez ci-dessous pour obtenir la hauteur et la largeur p> Dans le cas où il n'y a pas d'accès à bitmap code> que vous créez est
getwindowManager code> p>
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.
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, 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.
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. P>
d'accord. Pouvez-vous imprimer les valeurs de largeur et de hauteur juste pour voir ce qu'ils contiennent après l'initialisation?
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 :) } }
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. P>
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.