web-dev-qa-db-fra.com

Comment puis-je obtenir le bitmap du canevas dans lequel j'arrive sur Draw?

Comment puis-je créer le bitmap à partir du canevas de la vue personnalisée.

24
user940016

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).

16
kostja

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

36
jcw

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.

1
user940016

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

0
mayank1513