canvas.drawBitmap()的3个方法介绍
<1> drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint)
一般给src 设置为null即可, 把bitmap画到指定的矩形空间内.
eg.
canvas.drawBitmap(bird, null, new RectF(birdMovePointX, birdMovePointY, birdMovePointX + birdsSize, birdMovePointY + birdsSize), null);
<2> drawBitmap(Bitmap bitmap, float left, float top, Paint paint)
把bitmap显示到left, top所指定的左上角位置.
eg.
canvas.drawBitmap(bigPoleBitmap, bigPoleX, bigPoleY, paint);
<3> drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint)
使用一个Matrix参数, 用matrix对象来指定图片要显示的位置, 以及要采用什么具体的形变.
eg.
Bitmap treeLeaf;
Matrix treeLeaf_Matrix = new Matrix();
//scale, 缩放.
//*** 并且对treeLeaf_Matrix对象进行reset().
treeLeaf_Matrix.setScale(SCALESIZELEAF, SCALESIZELEAF);
//translate, 位移, 对图片中的每个像素点实现位移.
treeLeaf_Matrix.postTranslate(moveLeafX + 2 * degreeX, moveLeafY - degreeY);
//旋转
treeLeaf_Matrix.postRotate((float) (randomRotate + rotateValueLeaf - 60)
, moveLeafX + treeLeaf.getWidth() * SCALESIZELEAF / 2 + 2 * degreeX, moveLeafY + treeLeaf.getHeight() * SCALESIZELEAF / 2 - degreeY);
canvas.drawBitmap(treeLeaf, treeLeaf_Matrix, treeLeafPaint);
使用 Matrix类对图片实现形变后, 再进行显示
Matrix 类是用来实现对图像产生形变, 实现原理是基于: 图片在内存中存放的就是一个一个的像素点,而对于图片的变换主要是处理图片的每个像素点,对每个像素点进行相应的变换,即可完成对图像的变换。
在上面的例子中, 使用了postTranslate(), postRotate()这样的post() 系列方法, 还用了setScale()这类的set()系列方法, 例如setTranslate(float dx,float dy).
set()和post()的区别是:
set()相当于对matrix对象先重置reset(), 再施加形变操作.
post()相当于在已有的matrix对象的基础上, 再添加一个新的形变操作.
还有一类是pre()方法, 相当于在已有的matrix对象的基础上, 在之前添加一个新的形变操作, 在实际开发中, 用pre()这类方法的地方并不多.
refer to:
http://www.cnblogs.com/plokmju/p/android_Matrix.html
http://longshuai2007.blog.163.com/blog/static/14209441420117521823875/
---DONE.---