Android 游戏开发之Canvas画布的介绍及方法

 更新时间:2013年06月21日 10:44:44   作者:  
Android 游戏开发之Canvas画布的介绍及方法,需要的朋友可以参考一下

Canvas,在英语中,这个单词的意思是帆布。在Android中,则把Canvas当做画布,只要我们借助设置好的画笔(Paint类)就可以在画布上绘制我们想要的任何东西;另外它也是显示位图(Bitmap类)的核心类。随用户的喜好,Canvas还可设置一些关于画布的属性,比如,画布的颜色、尺寸等。Canvas提供了如下一些方法:
    Canvas(): 创建一个空的画布,可以使用setBitmap()方法来设置绘制具体的画布。
    Canvas(Bitmap bitmap): 以bitmap对象创建一个画布,则将内容都绘制在bitmap上,因此bitmap不得为null。
    Canvas(GL gl): 在绘制3D效果时使用,与OpenGL相关。
    drawColor: 设置Canvas的背景颜色。
    setBitmap:  设置具体画布。
    clipRect: 设置显示区域,即设置裁剪区。
    isOpaque:检测是否支持透明。
    rotate:  旋转画布
    translate:移动画布

    scale:缩放画布
    setViewport:  设置画布中显示窗口。
    skew:  设置偏移量。

    restore: 用来恢复上一次save之前的状态

    save:用来保存Canvas的当前状态

    注意: save方法、restore方法一般是成对出现的,save方法可多于restore方法,但restore方法不能多于save方法

    上面列举了几个常用的方法。在游戏开发中,我们可能需要对某个精灵执行旋转、缩放和一些其它操作。我们可以通过旋转画布来实现,但是旋转画布时会旋转画布上的所有对象,而我们只是需要旋转其中的一个,这时就需要用到save 方法来锁定需要操作的对象,在操作之后通过 restore 方法来解除锁定。


得到canvas画布对象

复制代码 代码如下:

Canvas canvas = getHolder().lockCanvas();

画布的一些属性和方法以及一些应用
复制代码 代码如下:

if (canvas != null) {
    //----设置画布绘图无锯齿
    canvas.setDrawFilter(pfd);
    //----利用填充画布,刷屏
    canvas.drawColor(Color.BLACK);
    //----绘制文本
    canvas.drawText("drawText", 10, 10, paint);
    //----绘制像素点
    canvas.drawPoint(10, 20, paint);
    //----绘制多个像素点
    canvas.drawPoints(new float[] { 10, 30, 30, 30 }, paint);
    //----绘制直线
    canvas.drawLine(10, 40, 50, 40, paint);
    //----绘制多条直线
    canvas.drawLines(new float[] { 10, 50, 50, 50, 70, 50, 110, 50 }, paint);
    //----绘制矩形
    canvas.drawRect(10, 60, 40, 100, paint);
    //----绘制矩形2
    Rect rect = new Rect(10, 110, 60, 130);
    canvas.drawRect(rect, paint);
    canvas.drawRect(rect, paint);
    //----绘制圆角矩形
    RectF rectF = new RectF(10, 140, 60, 170);
    canvas.drawRoundRect(rectF, 20, 20, paint);
    //----绘制圆形
    canvas.drawCircle(20, 200, 20, paint);
    //----绘制弧形
    canvas.drawArc(new RectF(150, 20, 200, 70), 0, 230, true, paint);
    //----绘制椭圆
    canvas.drawOval(new RectF(150, 80, 180, 100), paint);
    //----绘制指定路径图形
    Path path = new Path();
    //设置路径起点
    path.moveTo(160, 150);
    //路线1
    path.lineTo(200, 150);
    //路线2
    path.lineTo(180, 200);
    //路径结束
    path.close();
    canvas.drawPath(path, paint);
    //----绘制指定路径图形
    Path pathCircle = new Path();
    //添加一个圆形的路径
    pathCircle.addCircle(130, 260, 20, Path.Direction.CCW);
    //----绘制带圆形的路径文本
    canvas.drawTextOnPath("PathText", pathCircle, 10, 20, paint);
}
 

注:以上代码参考自《Android游戏编程之从零开始》

得到自定义图片宽高的bitmap(参数一:上下文对象,参数二:资源ID,参数三:自定义宽度,参数四:自定义高度)

复制代码 代码如下:

public static Bitmap loadBallView(Context context,int resId,int width,int height) {

    Resources resources = context.getResources();

    Drawable image = resources.getDrawable(resId);

    Bitmap bitmap = Bitmap.createBitmap(width,height, Bitmap.Config.ARGB_8888);

         Canvas canvas = new Canvas(bitmap);
         image.setBounds(0, 0, width,height);
         image.draw(canvas);

         return bitmap;
    }

利用canvas绘制bitmap
复制代码 代码如下:

Bitmap bitmap = loadBallView(context,R.drawable.image,100,100);

Paint paint = new Paint();

canvas.drawBitmap(bitmap, startX, startY, paint); //参数一:bitmap资源,参数二:起始X坐标,参数三:起始Y坐标,参数四:画笔paint对象

相关文章

  • 基于android布局中的常用占位符介绍

    基于android布局中的常用占位符介绍

    下面小编就为大家分享一篇基于android布局中的常用占位符介绍,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • Android RecyclerView区分视图类型的Divider的实现

    Android RecyclerView区分视图类型的Divider的实现

    本篇文章主要介绍了Android RecyclerView区分视图类型的Divider的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • Android基于OpenCV实现图像脱色

    Android基于OpenCV实现图像脱色

    脱色是将彩色图像转换为灰度图像的过程。同时,它也是数字打印,风格化的黑白照片渲染以及许多单通道图像处理应用程序中的基本工具。本文讲述基于OpenCV实现图像脱色的步骤
    2021-06-06
  • Android自定义控件RatingBar调整字体大小

    Android自定义控件RatingBar调整字体大小

    这篇文章主要为大家详细介绍了Android自定义控件RatingBar调整字体大小的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • Android打开手机相册获取图片路径

    Android打开手机相册获取图片路径

    这篇文章主要为大家详细介绍了Android打开手机相册获取图片路径,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • AndroidStudio上传本地项目到码云的方法步骤(OSChina)

    AndroidStudio上传本地项目到码云的方法步骤(OSChina)

    这篇文章主要介绍了AndroidStudio上传本地项目到码云的方法步骤(OSChina),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • Android开发仿映客送礼物效果

    Android开发仿映客送礼物效果

    这篇文章主要介绍了Android开发仿映客送礼物效果的实现代码,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起学习吧
    2016-09-09
  • ListView-添加item的事件监听实例

    ListView-添加item的事件监听实例

    下面小编就为大家带来一篇ListView-添加item的事件监听实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • Android Retrofit原理深入探索

    Android Retrofit原理深入探索

    Retrofit 是一个 RESTful 的 HTTP 网络请求框架的封装,网络请求的工作本质上是 OkHttp 完成,而 Retrofit 仅负责 网络请求接口的封装
    2022-11-11
  • Android 自定义一套 Dialog通用提示框 (代码库)

    Android 自定义一套 Dialog通用提示框 (代码库)

    这篇文章主要介绍了Android 自定义一套 Dialog通用提示框 (代码库),需要的朋友可以参考下
    2017-04-04

最新评论