MaskBitmap = Bitmap.createBitmap(width,height, Bitmap.Config.ARGB_8888);
MaskCanvas = new Canvas(MaskBitmap);
Rect rect = new Rect(0,0,width,height);
MaskCanvas.drawRect(rect,MaskPaint);
这个时候的并没有显示需要draw的图像,需要
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(MaskBitmap,0,0,MaskPaint);
}
请问一下为什么第一次drawrect
的时候为什么不显示图层。刚刚开始学习自定义view
,希望可以解释一下。
Canvas
Habituellement, la traduction est la toile. Qu'est-ce qu'une toile ? C'est un objet utilisé pour dessiner des images.Mais cela ne veut pas dire que tant que vous dessinez sur la toile, cela sera affiché à l'écran.
Il peut y avoir de nombreuses nouvelles toiles dans le programme, mais ce qui est affiché à l'écran est une toile désignée. Vous ne pouvez voir les choses qu'en les dessinant sur cette toile.
Ce qui est transmis dansonDraw(Canvas canvas)
est le canevas utilisé pour l'affichage à l'écran. Ce n'est que lorsque vous dessinez quelque chose sur ce canevas qu'il peut être affiché. Quant à votre propre nouvelle toile, vous pouvez y dessiner des éléments, mais elle ne sera pas affichée.La réponse de @Youming est correcte, un petit ajout
Lorsque vous dessinez pour la première fois, vous dessinez en fait le rectangle dans
MaskBitmap
, mais le bitmap ne s'affiche pas à l'écran, donc le rectangle dessiné ne sera pas affiché. Autrement dit, si vous définissez ceMaskBitmap
sur unImageView
, il sera affiché, mais le principe ici est aussi dansImageView.onDraw()
. À l’intérieur, dessinez ce Bitmap sur la toile d’écran.Si vous avez défini
MaskBitmap
surImageView
, puis dessinez le rectangle dansMaskBitmap
, vous devez toujours appelerImageView.invalidate()
pour déclencher le redessin afin d'afficher le rectangle.