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

时间: 2024-11-19 16:16:02

android:Canvas绘制自旋转Bitmap的相关文章

Android Canvas绘制

public class DrawView extends View { public DrawView(Context context) {  super(context); } @Override protected void onDraw(Canvas canvas) {  super.onDraw(canvas);  /*   * 方法 说明 drawRect 绘制矩形 drawCircle 绘制圆形 drawOval 绘制椭圆 drawPath 绘制任意多边形   * drawLine

Android canvas绘制柱形统计图

如今非常多应用都须要一些统计图.眼下第三方的统计图也有非常多.可是在自己看来仅仅要不是特别耽误时间还是选择用canvas自己绘制比較合理.依赖于第三方的绘制在需求上也荣easy有一定出入,并且也不easy扩展,所以自己就依据需求绘制了一些统计图,以下就是我绘制的柱状统计图,能够依据给定高和宽来自适应,不懂的地方能够留言联系我. 首先写一个基类,将公用的模块提取出来,这也体现设计模式中的抽象工厂模式和模板模式,以下是基类,一些共同处理的代码也能够放到BaseChartView里面.可是因为时间问题

Android canvas rotate():平移旋转坐标系至任意原点任意角度-------附:android反三角函数小结

自然状态下,坐标系以屏幕左上角为原点,向右是x正轴,向下是y正轴.现在要使坐标系的原点平移至任一点O(x,y),且旋转a角度,如何实现? 交待下我的问题背景,已知屏幕上有两点p1和p2,构成直线l.我要以两点的中点mid(x,y)为坐标原点,线段l的中垂线为一个轴,l为另外一个轴,做一个坐标系.切割出一个边长为d的正方形.示意图如下所示: double d = Math.sqrt((p2.x-p1.x)*(p2.x - p1.x)+(p2.y-p1.y)*(p2.y-p1.y)); //p1.p

Android中android.graphics下面的绘制图形类Canvas,Paint,Bitmap,Drawable

1.概念区别: 很多网友刚刚开始学习Android平台,对于Drawable.Bitmap.Canvas和Paint它们之间的概念不是很清楚, 其实它们除了Drawable外早在Sun的J2ME中就已经出现了,但是在Android平台中,Bitmap.Canvas相关的都有所变化. 首先让我们理解下Android平台中的显示类是View,但是还提供了底层图形类android.graphics,今天所说的这些均为graphics底层图形接口. Bitmap - 称作位图,一般位图的文件格式后缀为b

Android两种旋转Bitmap方法比较

方法1. 利用Bitmap.createBitmap Bitmap adjustPhotoRotation(Bitmap bm, final int orientationDegree) { Matrix m = new Matrix(); m.setRotate(orientationDegree, ( float ) bm.getWidth() / 2, ( float ) bm.getHeight() / 2); try { Bitmap bm1 = Bitmap.createBitmap

android canvas rotate 旋转的一些总结(旋转的一些注意点)

在自定义控件和利用surfaceview时候利用serfaceHolder锁定画布画图做游戏的时候,在绘制tank的图片的时候需要根据tank的方向来绘制,因此就用到canvas的rotate(float degrees)方法,试过很多次都导致屏幕上绘制的图片都乱七八糟,不是按照想象的来的.经过了很多次的尝试终于掌握了个规律: canvas在绘制的时候旋转遵循: 1.canvas.draw(bitmap , left , top , paint)中left . top始终是按照画布的坐标来的,不

Android自定义控件 -Canvas绘制折线图(实现动态报表效果)

有时候我们在项目中会遇到使用折线图等图形,Android的开源项目中为我们提供了很多插件,但是很多时候我们需要根据具体项目自定义这些图表,这一篇文章我们一起来看看如何在Android中使用Canvas绘制折线图.先看看绘制的效果: 代码: public class MyView extends View { //坐标轴原点的位置 private int xPoint=60; private int yPoint=260; //刻度长度 private int xScale=8;  //8个单位构

Android自定义组件系列【9】——Canvas绘制折线图

有时候我们在项目中会遇到使用折线图等图形,Android的开源项目中为我们提供了很多插件,但是很多时候我们需要根据具体项目自定义这些图表,这一篇文章我们一起来看看如何在Android中使用Canvas绘制折线图.先看看绘制的效果: 实现原理很简单,我就直接给出代码: package com.example.testcanvasdraw; import java.util.ArrayList; import java.util.List; import java.util.Random; impo

Android Canvas绘图详解(图文) - 泡在网上的日子

body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI",Tahoma,Helvetica,Sans-Serif,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5;