在自定义View中经常需要创建一块固定大小的画布去画一些元素,我们不能直接创建这块画布,那应该怎么做呢?
创建一个固定大小的位图
位图和画布(Canva)关联
在画布上添加各种元素
//Drawable转化为Bitmap方法
Bitmap srcBitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888); Canvas srcCanvas = new Canvas(srcBitmap); src.draw(srcCanvas); //src是Drawable类型//创建圆形图片方法
private Bitmap createCircleImage(Bitmap source, int min) { final Paint paint = new Paint(); paint.setAntiAlias(true); Bitmap target = Bitmap.createBitmap(min, min, Bitmap.Config.ARGB_8888); /** * 产生一个同样大小的画布 */ Canvas canvas = new Canvas(target); /** * 首先绘制圆形 */ canvas.drawCircle(min / 2, min / 2, min / 2-2, paint); /** * 使用SRC_IN */ paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); /** * 绘制图片 */ canvas.drawBitmap(source, 0, 0, paint); //在自己定义的canvas想把Bitmap画在canvas上 return target; }
这两段代码大同小异
第一段是把资源文件通过Canvas绘制到Bitmap上
第二段使用Canvas吧元素绘制出来
-------------------------------------
上面两段分别有一个不同的Canvas怎么把这个Canvas添加到
@Override protected void onDraw(Canvas canvas)
在这个重写的方法中,已经有了canvas,对于自己创建的Canvas如何添加到试图
Canvas canvas = new Canvas(target);不要忘记 自己定义的Canvas已经和Bitmap关联了,只需要调用
drawBitmap(@NonNull Bitmap bitmap, float left, float top, @Nullable Paint paint)
canvas.drawBitmap(......);