Quelqu'un pourrait-il essayer de m'expliquer pourquoi
public void addView(View child) {
child.setDrawingCacheEnabled(true);
child.setWillNotCacheDrawing(false);
child.setWillNotDraw(false);
child.buildDrawingCache();
if(child.getDrawingCache() == null) { //TODO Make this work!
Log.w("View", "View child's drawing cache is null");
}
setImageBitmap(child.getDrawingCache()); //TODO MAKE THIS WORK!!!
}
Consigne TOUJOURS que le cache de dessin est nul et définit le bitmap sur null?
Dois-je réellement dessiner la vue avant de définir le cache?
Merci!
getDrawingCache()
utilisationView#draw
pourCanvas
approcherRéponses:
J'avais ce problème aussi et j'ai trouvé cette réponse:
la source
si
getDrawingCache
c'est toujours lesreturning null
gars: utilisez ceci:Référence: https://stackoverflow.com/a/6272951/371749
la source
getLayoutParams
au lieu de v.getWidth () et v.getHeight ()?ImageView
pas encore reçu d'image, il semble donc être 0. Cela se jouerait différemment pour le code de différentes personnes, mais assurez-vous que votre appelloadBitmapFromView()
est définitivement après votreImageView
contient une image.La raison fondamentale pour laquelle on obtient des valeurs nulles est que la vue n'est pas dimensionnée. Toutes les tentatives alors, en utilisant view.getWidth (), view.getLayoutParams (). Width, etc., y compris view.getDrawingCache () et view.buildDrawingCache (), sont inutiles. Donc, vous devez d'abord définir les dimensions de la vue, par exemple:
(Vous avez déjà défini 'width' et 'height' comme vous le souhaitez ou les avez obtenus avec WindowManager, etc.)
la source
J'utilise ça à la place.
la source
Travaille mieux 4me
la source
Si la vue que vous voulez capturer s'affiche vraiment à l'écran, mais qu'elle renvoie null. Cela signifie que vous capturez la vue avant que le gestionnaire de fenêtres ne la génère. Certaines mises en page sont très compliquées. Si la mise en page comprend des mises en page imbriquées, layout_weight..etc, plusieurs fois relayout obtiennent la taille exacte. La meilleure solution est d'attendre que le gestionnaire de fenêtres termine le travail, puis d'obtenir une capture d'écran. Essayez de mettre getDrawingCache () dans le gestionnaire.
la source
Les réponses de @ cV2 et @ nininho fonctionnent toutes les deux pour moi.
Une des autres raisons pour lesquelles j'ai découvert la manière difficile était que la vue que j'avais générait une vue qui a une largeur et une hauteur de 0 ( c'est-à-dire imaginez avoir un TextView avec un texte de chaîne d'une chaîne vide ). Dans ce cas, getDrawingCache renverra null, alors assurez-vous simplement de vérifier cela. J'espère que cela aide certaines personnes.
la source
L'erreur peut être due au fait que votre vue est trop grande pour tenir dans le cache de dessin .
J'ai obtenu l'explication de mon problème "View.getDrawingCache renvoie null" dans mes journaux:
La documentation Android indique également : les appareils Android peuvent avoir aussi peu que 16 Mo de mémoire disponible pour une seule application. C'est pourquoi vous ne pouvez pas charger de gros bitmap.
la source
J'essaye de créer le nombre n d'images dynamiquement basé sur la vue.
Je pense que ce code aidera quelqu'un.
la source
C'est le moyen simple et efficace d'obtenir un bitmap
la source