当我们调整好画笔之后,现在需要绘制到画布上,这就得用Canvas类了。在Android中既然把Canvas当做画布,那么就可以在画布上绘制我们想要的任何东西。除了在画布上绘制之外,还需要设置一些关于画布的属性,比如,画布的颜色、尺寸等。下面来分析Android中Canvas有哪些功能,Canvas提供了如下一些方法:

Canvas(): 创建一个空的画布,可以使用setBitmap()方法来设置绘制具体的画布。
       Canvas(Bitmap bitmap): 以bitmap对象创建一个画布,则将内容都绘制在bitmap上,因此bitmap不得为null。
       Canvas(GL gl): 在绘制3D效果时使用,与OpenGL相关。
       drawColor: 设置Canvas的背景颜色。
       setBitmap:  设置具体画布。
       clipRect: 设置显示区域,即设置裁剪区。
       isOpaque:检测是否支持透明。
       rotate:  旋转画布
       setViewport:  设置画布中显示窗口。
       skew:  设置偏移量。

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

我们对左边的矩形执行了旋转操作,而没有旋转右边的矩形,由于我们设置了裁剪区域,因此左边的矩形只能看到一部分,下面让我们来看看代码 这里我只贴出了我们自己的 View类 GameView Activity类不贴出了 就在里边 new 一个GameView类 然后设置布局 然后main.xml也不贴出来了 因为它根本就没用到。

Java代码 
import android.content.Context;  
import android.graphics.Canvas;  
import android.graphics.Color;  
import android.graphics.Paint;  
import android.graphics.Rect;  
import android.view.KeyEvent;  
import android.view.MotionEvent;  
import android.view.View;  
 
public class GameView extends View implements Runnable {  
/* 声明Paint对象 */  
private Paint mPaint = null;  
 
public GameView(Context context) {  
super(context);  
/* 构建对象 */  
mPaint = new Paint();  
 
/* 开启线程 */  
new Thread(this).start();  
}  
 
public void onDraw(Canvas canvas) {  
super.onDraw(canvas);  
 
/* 设置画布的颜色 */  
canvas.drawColor(Color.BLACK);  
 
/* 设置取消锯齿效果 */  
mPaint.setAntiAlias(true);  
 
/* 设置裁剪区域 */  
canvas.clipRect(10, 10, 280, 260);  
 
/* 线锁定画布 */  
canvas.save();  
/* 旋转画布 */  
canvas.rotate(45.0f);  
 
/* 设置颜色及绘制矩形 */  
mPaint.setColor(Color.RED);  
canvas.drawRect(new Rect(15, 15, 140, 70), mPaint);  
 
/* 解除画布的锁定 */  
canvas.restore();  
 
/* 设置颜色及绘制另一个矩形 */  
mPaint.setColor(Color.GREEN);  
canvas.drawRect(new Rect(150, 75, 260, 120), mPaint);  
}  
 
// 触笔事件  
public boolean onTouchEvent(MotionEvent event) {  
return true;  
}  
 
// 按键按下事件  
public boolean onKeyDown(int keyCode, KeyEvent event) {  
return true;  
}  
 
// 按键弹起事件  
public boolean onKeyUp(int keyCode, KeyEvent event) {  
return false;  
}  
 
public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) {  
return true;  
}  
 
public void run() {  
while (!Thread.currentThread().isInterrupted()) {  
try {  
Thread.sleep(100);  
} catch (InterruptedException e) {  
Thread.currentThread().interrupt();  
}  
// 使用postInvalidate可以直接在线程中更新界面  
postInvalidate();  
}  
}  
}

Android Canvas类介绍的更多相关文章

  1. Android Paint类介绍以及浮雕和阴影效果的设置

    Paint类介绍 Paint即画笔,在绘制文本和图形用它来设置图形颜色, 样式等绘制信息. 1.图形绘制 setARGB(int a,int r,int g,int b); 设置绘制的颜色,a代表透明 ...

  2. Android Paint类介绍以及浮雕和阴影效果的设置(转)

    转自:https://blog.csdn.net/lpjishu/article/details/45558375 Paint类介绍 Paint即画笔,在绘制文本和图形用它来设置图形颜色, 样式等绘制 ...

  3. Android——Canvas类的学习

    转:http://blog.sina.com.cn/s/blog_61ef49250100qw9x.html 今晚瞎折腾,闲着没事画了个机器人——android,浪费了一个晚上的时间.画这丫还真不容易 ...

  4. Android TextUtils类介绍

    对于字符串处理Android为我们提供了一个简单实用的TextUtils类,如果处理比较简单的内容不用去思考正则表达式不妨试试这个在android.text.TextUtils的类,主要的功能如下: ...

  5. Android Matrix类以及ColorMatri

    引自:http://www.chinabaike.com/t/37396/2014/0624/2556217.html Android Matrix类以及ColorMatrix类详解 最近在系统学习了 ...

  6. Android ---paint类

    引自:http://www.cnblogs.com/-OYK/archive/2011/10/25/2223624.html Android Paint和Color类   要绘图,首先得调整画笔,待画 ...

  7. Android Canvas 绘图

    画布(Canvas)是图形编程中一个很普通的概念,通常由三个基本的绘图组件组成:       Canvas  提供了绘图方法,可以向底层的位图绘制基本图形.       Paint  也称为" ...

  8. 我的Android第三章:Android的组件介绍

    小编摘录了Android文档介绍Android四大组件的基本内容,感觉文档的内容写的很详细所以小编将它写入了博客 Android 使用Java语言开发.Android SDK 工具编译代码-以及任意数 ...

  9. android canvas d

    (以下转自:http://blog.csdn.net/longyi_java/article/details/6930480) 1.基本的绘制图片方法 //Bitmap:图片对象,left:偏移左边的 ...

随机推荐

  1. skimage.io.imread vs caffe.io.load_image

    这两周在跑一个模型,我真的是被折腾的要崩溃了. 最后原因就是数据类型的问题,你说是不是应该管小黑屋啊. skimage.io.imread得到的是uint8的数据,而caffe.io.load_ima ...

  2. 1.vue脚手架搭建项目

    前言: 在使用Vue-cli脚手架搭建项目之前,需要安装node.js和npm以及vue-cli. 开始搭建项目: 1.打开cmd win+R 2.转到要搭建的项目路径: g: cd Webapp/v ...

  3. Centos防火墙添加IP白名单

    Centos iptables防火墙添加IP白名单,指定IP可访问端口 vi /etc/sysconfig/iptables 以下为我虚拟机的防火墙为例(Centos 7) # sample conf ...

  4. 关于 ReactNative 环境搭建之 error: invalid developer directory '/Library/Developer/CommandLineTools' - RN

    简要说明,此次尝试安装 ReactNative 时当前 MacPro 版本为 10.13.6.Xcode 版本为 Version 9.4.1 (9F2000),按照官方的完整原生环境搭建流程一步步执行 ...

  5. BZOJ1046: [HAOI2007]上升序列(LIS)

    Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 5740  Solved: 2025[Submit][Status][Discuss] Descript ...

  6. UVA_10820_send a table

    When participating in programming contests, you sometimes face the following problem: You know how t ...

  7. 前端之HTML和CSS

    html概述及html文档基本结构 html概述 HTML是 HyperText Mark-up Language 的首字母简写,意思是超文本标记语言,超文本指的是超链接,标记指的是标签,是一种用来制 ...

  8. struts2入门第一天----------配置环境

    放假之后有空就开始走上了三大框架的学习.第一个选择的框架是struts2.首先第一步当然是环境的配置.去apache官网把struts2下载下来.然后在自己的开发工具下创建一个web项目.在lib文件 ...

  9. JS提示Cannot read property 'replace' of undefined

    出现这个错误的原因一般是传的参数为null 在传参之前加个是否为null的判断就行了.

  10. input宽度超出

    设置样式:style=“width:100%”;即可