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
보통 번역은 캔버스입니다. 캔버스란 그림을 그리는 데 사용되는 것입니다.그러나 캔버스에 그림을 그린다고 해서 화면에 나타나는 것은 아닙니다.
프로그램에는 새로운 캔버스가 많이 있을 수 있지만 화면에 표시되는 것은 지정된 캔버스입니다. 이 캔버스에 그려야만 사물을 볼 수 있습니다.
onDraw(Canvas canvas)
에 전달되는 것은 화면 표시에 사용되는 캔버스입니다. 이 캔버스에 무언가를 그려야 표시됩니다. 자신만의 새 캔버스에 그림을 그릴 수는 있지만 표시되지는 않습니다.@Youming 님의 답변이 맞습니다. 약간의 추가
처음 그릴 때
MaskBitmap
에 직사각형을 그리는데 비트맵이 화면에 표시되지 않습니다. 즉,MaskBitmap
를ImageView
로 설정하면 표시되지만 여기서는ImageView.onDraw()
화면 안에 비트맵을 그리는 것이 원칙입니다. 캔버스켜짐.을
MaskBitmap
으로 설정한 다음ImageView
에 직사각형을 그린 경우에도MaskBitmap
를 호출하여 다시 그리기를 트리거하여 직사각형을 표시해야 합니다.ImageView.invalidate()