Canvas中提供了drawBitmap方法用于绘制Bitmap,其使用代码如下所示:
private void drawBitmap(Canvas canvas){ //如果bitmap不存在,那么就不执行下面的绘制代码 if(bitmap == null){ return; } //直接完全绘制Bitmap canvas.drawBitmap(bitmap, 0, 0, paint); //绘制Bitmap的一部分,并对其拉伸 //srcRect定义了要绘制Bitmap的哪一部分 Rect srcRect = new Rect(); srcRect.left = 0; srcRect.right = bitmap.getWidth(); srcRect.top = 0; srcRect.bottom = (int)(0.33 * bitmap.getHeight()); float radio = (float)(srcRect.bottom - srcRect.top) / bitmap.getWidth(); //dstRecF定义了要将绘制的Bitmap拉伸到哪里 RectF dstRecF = new RectF(); dstRecF.left = 0; dstRecF.right = canvas.getWidth(); dstRecF.top = bitmap.getHeight(); float dstHeight = (dstRecF.right - dstRecF.left) * radio; dstRecF.bottom = dstRecF.top + dstHeight; canvas.drawBitmap(bitmap, srcRect, dstRecF, paint); }界面如下所示:
我在res/drawable目录下放置了一张android的图片,下面对上面的代码进行说明:
我们知道Bitmap是一个矩形,其是有宽度和高度的,也就说以bitmap对象本身作为坐标系(原点在bitmap左上角),我们可以构建一个Rect对象,如果满足left为0,top为0,right为bitmap的宽度,bottom为bitmap的高度,那么就说名我们要绘制整个Bitmap。但是有时候我们只想绘制Bitmap的一部分,例如我们上面的图中所示,我们想只绘制Android图像的头部区域怎么办呢?办法是我们构建一个Rect对象,定义我们要绘制Bitmap的哪些部位。
比如我们通过代码srcRect.bottom = (int)(0.33 * bitmap.getHeight())指定了我们只绘制bitmap对象头部1/3的位置,即Android图像的头部,这样我们用该指定的srcRect绘制bitmap时只绘制了其头部位置。需要特别注意的是,srcRect中left、top、right、bottom的值都是以Bitmap本身的局部坐标系为基础的。
有时候我们需要将原有的bitmap进行放大或缩小,如上图所示,我们将原有图片放大了,这怎么做呢?我们需要指定RectF类型的参数dstRectF,以便告诉Android将srcRect中定义的bitmap缩放到哪里。即Android会将srcRect中定义的bitmap缩放到dstRectF区域范围内。需要注意的是,此处的dstRecF是绘图坐标系中的坐标,不是Bitmap本身的局部坐标系。我们在代码中保证了dstRecF的长宽比与srcRect中的长宽比相同,这样不会导致图片长宽比例变形,效果见上图中的第二个放大的图形。
代码上传到CSDN,点此下载
感谢大家耐心读完,希望文本对大家了解Canvas中的绘图基础有所帮助!
转载请注明:Android开发中文站 » Android中Canvas绘图基础详解(附源码下载)
继续浏览有关