Comment puis-je créer le bitmap à partir du canevas de la vue personnalisée.
Il n'y a aucun moyen d'extraire le Bitmap
d'un Canvas
. Le seul moyen d'y accéder est de le passer vous-même lors de la création du canevas comme celui-ci new Canvas(myBitmap)
et de conserver la référence.
EDIT2: voir @Alex comment coup - l'approche de passer un Bitmap
au Canvas
ne semble pas fonctionner pour les versions plus récentes d'Android.
EDIT: Si vous ne créez pas vous-même le Canvas
, vous pouvez créer un Bitmap
de la taille d'un écran (ou la taille dont vous avez besoin), puis le transmettre au Canvas
dans onDraw
appelle comme ceci: canvas.setBitmap(myBitmap)
.
Bien qu'il n'y ait pas de fonction getBitmap()
pour un canevas, puisque vous créez une vue personnalisée, ce que vous pouvez faire à la place est d'écrire une fonction comme celle-ci dans votre classe de vue.
public Bitmap get(){
return this.getDrawingCache();
}
Cela renvoie le bitmap de la vue, mais il est important que dans tous vos constructeurs vous ajoutez ceci,
this.setDrawingCacheEnabled(true);
Sinon, getDrawingCache
renverra null
J'ai découvert que Canvas a une fonction setBitmap, mais pas une fonction getBitmap. C'est étrange, mais de toute façon, cela me permet de créer le bitmap moi-même et de le passer au canevas, en conservant la référence.
getDrawingCache () est déconseillé dans l'API 28.
Alors maintenant, vous pouvez utiliser le code suivant dans votre vue personnalisée
Bitmap bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
draw(canvas);
// return bitmap; -- this is the bitmap you need
Si vous souhaitez utiliser ce code en dehors de votre vue personnalisée, utilisez des méthodes comme viewInstance.getHeight () ... viewInstance.draw (canvas) dessinera la vue sur le bitmap