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
Biasanya terjemahan adalah kanvas. Apakah itu kanvas? Ia adalah sesuatu yang digunakan untuk melukis gambar.Tetapi ini tidak bermakna selagi anda melukis di atas kanvas, ia akan dipaparkan pada skrin.
Mungkin terdapat banyak kanvas baharu dalam program, tetapi apa yang dipaparkan pada skrin ialah kanvas yang ditetapkan Anda hanya boleh melihat sesuatu dengan melukisnya pada kanvas ini.
Apa yang diluluskan dalamonDraw(Canvas canvas)
ialah kanvas yang digunakan untuk paparan skrin Hanya apabila anda melukis sesuatu pada kanvas ini boleh ia dipaparkan. Bagi kanvas baharu anda sendiri, anda boleh melukis sesuatu di atasnya, tetapi ia tidak akan dipaparkan.Jawapan @Youming betul, sedikit tambahan
Apabila anda melukis buat kali pertama, anda sebenarnya melukis segi empat tepat ke dalam
MaskBitmap
, tetapi peta bit tidak dipaparkan pada skrin, jadi segi empat tepat yang dilukis tidak akan dipaparkan dengan kata lain, jika anda menetapkan iniMaskBitmap
kepadaImageView
, ia akan dipaparkan, tetapi prinsipnya di sini juga dalamImageView.onDraw()
Di dalam, lukis Peta Bit ini pada kanvas skrin.Jika anda telah menetapkan
MaskBitmap
kepadaImageView
, dan kemudian lukis segi empat tepat ke dalamMaskBitmap
, maka anda masih perlu memanggilImageView.invalidate()
untuk mencetuskan lukis semula bagi memaparkan segi empat tepat.