android:Canvas绘制自旋转Bitmap

  • 需求
    在SurfaceView或者普通View中,我们在每个绘制周期(onDraw)中,不仅需要更新绘制Bitmap对象在View中得位置,而且还希望Bitmap能够以它自身的中心点为圆心,进行自旋转。
  • 解决
    使用Canvas的drawBitmap(Bitmap bitmap,Matrix matrix,Paint paint)方法,最重要的就是定制Matrix。
    代码如下:

    /**
     * 绘制自旋转位图
     * 
     * @param canvas
     * @param paint
     * @param bitmap
     *            位图对象
     * @param rotation
     *            旋转度数
     * @param posX
     *            在canvas的位置坐标
     * @param posY
     */
    private void drawRotateBitmap(Canvas canvas, Paint paint, Bitmap bitmap,
            float rotation, float posX, float posY) {
        Matrix matrix = new Matrix();
        int offsetX = bitmap.getWidth() / 2;
        int offsetY = bitmap.getHeight() / 2;
        matrix.postTranslate(-offsetX, -offsetY);
        matrix.postRotate(rotation);
        matrix.postTranslate(posX + offsetX, posY + offsetY);
        canvas.drawBitmap(bitmap, matrix, paint);
    }

首先,我们将bitmap向左上角移动一半(xy各一半),然后旋转需要的度数。最后再将center移动回来。然后再移动到位置坐标(posX,posY)上。注意,坐标(posX,posY)是位图的左上角的点。

另外,为了使旋转连贯,调用该方法时:

rotation += 0.1f * (new Random().nextInt(20));
drawRotateBitmap(canvas, paint, bitmap, rotation, posX, posY);
  • 更多交流

Android开发联盟QQ群:272209595

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值