当前位置:  编程技术>移动开发

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

    来源: 互联网  发布时间:2014-10-20

    本文导语:  Canvas,在英语中,这个单词的意思是帆布。在Android中,则把Canvas当做画布,只要我们借助设置好的画笔(Paint类)就可以在画布上绘制我们想要的任何东西;另外它也是显示位图(Bitmap类)的核心类。随用户的喜好,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图像绘制(五)画布保存为指定格式/大小的图片
  • Android 将 android view 的位置设为右下角的解决方法
  • Android工程:引用另一个Android工程的方法详解
  • Android 按后退键退出Android程序的实现方法
  • android 横竖屏限制的配置方法
  • android ListView自动滚动方法
  • Android开发之注册登录方法示例
  • Android获取本机电话号码的简单方法
  • android TextView不用ScrollViewe也可以滚动的方法
  • android获取手机唯一标识的方法
  • android 设置全屏的两种方法
  • Android中实现EditText圆角的方法
  • Android启动模拟器报错解决方法
  • Android设置桌面背景图片的实现方法
  • android真机调试时无法显示logcat信息的解决方法介绍
  • android开发教程之android的handler使用方法
  • android ListView的右边滚动滑块启用方法 分享
  • Android TextView设置背景色与边框的方法详解
  • Android实现信号强度监听的方法
  • android,不显示标题的方法小例子
  • c/c++ iis7站长之家
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 申请Android Map 的API Key(v2)的最新申请方式(SHA1密钥)
  • Android瀑布流实例 android_waterfall
  • Android开发需要的几点注意事项总结
  • Android系统自带样式 (android:theme)
  • android 4.0 托管进程介绍及优先级和回收机制
  • Android网络共享软件 Android Wifi Tether
  • Android访问与手机通讯相关类的介绍
  • Android 图标库 Android GraphView
  • Android及andriod无线网络Wifi开发的几点注意事项
  • 轻量级Android开发工具 Android Tools
  • Android 2.3 下StrictMode介绍
  • Android 开发环境 Android Studio
  • IDEA的Android开发插件 idea-android
  • Android手机事件提醒 Android Notifier
  • XBMC的Android客户端 android-xbmcremote
  • Android小游戏 Android Shapes
  • Android电池监控 Android Battery Dog
  • android开发:“android:WindowTitle”没有对应项no resource
  • Android 上类似IOS 的开关控件。 Android ToggleButton
  • Android 2D游戏引擎 Android Angle
  • Android的UI工具包 android-ui-utils


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3