【读书笔记《Android游戏编程之从零开始》】13.游戏开发基础(Paint 画笔)
1.Paint画笔
Panit(画笔)是绘图额辅助类,其类中包含文字和位图额样式、颜色等属性信息。Paint 的常用方法如下:
setAntiAlias(boolean aa)
作用:设置画笔是否无锯齿
参数:true 表示无锯齿,false 表示有锯齿,默认为 false 。
setAlpha(int a)
作用:设置画笔的透明度
参数:透明值
setTextAlign(Paint.Align align)
作用:设置绘制文本的锚点
参数:Paint.Align 类中的常量
measureText(String text)
作用:获取文本内容的宽度
参数:文本内容
setStyle(Style style)
作用:设置画笔样式
参数:样式实例
setColor(int color)
作用:设置画笔颜色
参数:色值
setStrokeWidth(float width)
作用:设置画笔额粗细程度
参数:画笔粗细值
setTextSize(float textSize)
作用:设置画笔在绘制文本时,文本字体的尺寸
参数:尺寸值
setARGB(int a,int r,int g,int b)
作用:设置画笔的ARGB分量
第一个参数:画笔透明度分量
第二个参数:画笔红色分量
第三个参数:画笔绿色分量
第四个参数:画笔蓝色分量
2.Paint 画笔实例
效果图如下:

步骤:新建项目“PanitProject”,游戏框架为MySurfaceView 游戏框架,具体步骤参照“11.游戏开发基础(SurfaceView 游戏框架、View 和 SurfaceView 的区别)”。
主要绘图方法myDraw()修改如下:
public void myDraw()
{
try {
canvas =sfh.lockCanvas();
if(canvas!=null)
{
canvas.drawColor(Color.WHITE);
//--设置画笔无锯齿
Paint paint1 = new Paint();
canvas.drawCircle(40,30,20,paint1);
paint1.setAntiAlias(true);
canvas.drawCircle(100,30,20,paint1);
//--设置画笔的透明度
canvas.drawText("无透明度",100,70,new Paint());
Paint paint2 = new Paint();
paint2.setAlpha(0x77);
canvas.drawText("半透明度",20,70,new Paint());
//--设置绘制文本的锚点
canvas.drawText("锚点",20,90,new Paint());
Paint paint3 = new Paint();
//设置以文本的中心点绘制
paint3.setTextAlign(Paint.Align.CENTER);
canvas.drawText("锚点",20,105,paint3);
//--获取文本的长度
Paint paint4 = new Paint();
float len = paint4.measureText("文本宽度:");
canvas.drawText("文本长度:"+len,20,130,new Paint());
//--设置画笔样式
canvas.drawRect(new Rect(20,140,40,160),new Paint());
Paint paint5 = new Paint();
//设置画笔不填充
paint5.setStyle(Paint.Style.STROKE);
canvas.drawRect(new Rect(60,140,80,160),paint5);
//--设置画笔颜色
Paint paint6 = new Paint();
paint6.setColor(Color.BLUE);
canvas.drawText("蓝色",30,180,paint6);
//--设置画笔的粗细程度
canvas.drawLine(20,200,70,200,new Paint());
Paint paint7 = new Paint();
paint7.setStrokeWidth(7);
canvas.drawLine(20,220,70,220,paint7);
//--设置画笔绘制文本的字体粗细
Paint paint8 = new Paint();
paint8.setTextSize(20);
canvas.drawText("文字尺寸",20,260,paint8);
//--设置画笔的ARGB 分量
Paint paint9 = new Paint();
paint9.setARGB(0x77,0xff,0x00,0x00);
canvas.drawText("红色半透明",20,290,paint9);
}
}
catch(Exception ex){ }finally {
if(canvas!=null)
{
sfh.unlockCanvasAndPost(canvas);
}
}
}
Paint 画笔类提供了一个抗锯齿的函数,其实 Canvas 画布也提供额绘图抗锯齿的函数,如下所示:
Canvas.setDrawFilter(DrawFilter filter);
作用:为画布设置绘图抗锯齿
参数:绘图过滤器实例
实例化一个DrawFilter 类的对象,代码如下所示:
PaintFlagsDrawFilter pfd = new PaintFlagsDrawFilter(0,Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG);
【读书笔记《Android游戏编程之从零开始》】13.游戏开发基础(Paint 画笔)的更多相关文章
- Windows游戏编程之从零开始d
Windows游戏编程之从零开始d I'm back~~恩,几个月不见,大家还好吗? 这段时间真的好多童鞋在博客里留言说或者发邮件说浅墨你回来继续更新博客吧. woxiangnifrr童鞋说每天都在来 ...
- Java并发编程的艺术读书笔记(2)-并发编程模型
title: Java并发编程的艺术读书笔记(2)-并发编程模型 date: 2017-05-05 23:37:20 tags: ['多线程','并发'] categories: 读书笔记 --- 1 ...
- Java并发编程的艺术读书笔记(1)-并发编程的挑战
title: Java并发编程的艺术读书笔记(1)-并发编程的挑战 date: 2017-05-03 23:28:45 tags: ['多线程','并发'] categories: 读书笔记 --- ...
- 读书笔记--Android Gradle权威指南(下)
前言 最近看了一本书<Android Gradle 权威指南>,收获挺多,就想着来记录一些读书笔记,方便后续查阅. 本篇内容是基于上一篇:读书笔记--Android Gradle权威指南( ...
- 《Essential C++》读书笔记 之 C++编程基础
<Essential C++>读书笔记 之 C++编程基础 2014-07-03 1.1 如何撰写C++程序 头文件 命名空间 1.2 对象的定义与初始化 1.3 撰写表达式 运算符的优先 ...
- 【读书笔记《Android游戏编程之从零开始》】18.游戏开发基础(碰撞检测)
1.矩形碰撞 所谓矩形碰撞,就是利用两个矩形之间的位置关系来进行判断,如果矩形的像素在另外一个矩形之中,或者之上都可以认为这两个矩形发生了碰撞. 如果单纯的去考虑哪些情况会判定两个矩形发生碰撞,倒不如 ...
- 【读书笔记《Android游戏编程之从零开始》】19.游戏开发基础(游戏音乐与音效)
在一款游戏中,除了华丽的界面 UI 直接吸引玩家外,另外重要的就是游戏的背景音乐与音效:合适的背景音乐以及精彩的音效搭配会令整个游戏上升一个档次. 在 Android 中.常用于播放游戏背景音乐的类是 ...
- 【读书笔记《Android游戏编程之从零开始》】17.游戏开发基础(游戏适屏的简述和作用、让游戏主角动起来)
1.游戏适屏的简述和作用 由于市面上安装 Android 系统的手机不断增多,出现了各种分辨率.各种屏幕尺寸的Android 系统手机.为了保证一个游戏或者一个软件能在所有的 Android 手机上正 ...
- 【读书笔记《Android游戏编程之从零开始》】16.游戏开发基础(动画)
1. Animation动画 在Android 中,系统提供了动画类 Animation ,其中又分为四种动画效果: ● AlphaAnimation:透明度渐变动画 ● ScaleAnimati ...
随机推荐
- Activity按下2次退出和获取当前时间
先看下onBackPressed和onKeyDown的区别 在Android上有两种方法来获取该按钮的事件 1.直接获取按钮按下事件,此方法兼容Android 1.0到Android 2.1 也是常规 ...
- 小白学Linux--虚拟机下安装Ubuntu16
最近接收到任务,说是下半年可能要搞全文检索.听到后顿时炸锅了,一方面是对新技术的兴奋(当然主要还是这技术比较值钱),另一方面,我TM连Linux都不会玩,怎么搞全文检索.怀揣着对开源世界的无线向往(恐 ...
- Linux守护进程实现程序只运行一次
1.守护进程 守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件. 2.让程序只运行一次 如果让程序只运行一次,有很多方法,此处的一种 ...
- [iOS] 使用xib做为应用程序入口 with Code
[iOS] 使用xib做为应用程序入口 with Code 前言 开发iOS APP的时候,使用storyboard能够快速并且直觉的建立用户界面.但在多人团队开发的情景中,因为storyboard是 ...
- Sass学习之路(2)——Sass环境安装(windows版)
因为本喵目前用的是window10的本子,所以这里就发windows版本的安装流程啦.(希望有朋友可以赞助我一个mac(┳_┳)): 第一步:安装ruby 因为Sass是基于ruby编写的,所以先去官 ...
- Searching External Data in SharePoint 2010 Using Business Connectivity Services
from:http://blogs.msdn.com/b/ericwhite/archive/2010/04/28/searching-external-data-in-sharepoint-2010 ...
- 为什么Android应该根据屏幕分辨率来加载不同的图片文件
1.图片在xxhdpi,手机是hdpi的 我们有一个手机是hdpi的.我们还有一个图片,我们把他放在xxhdpi下.当手机显示的时候,系统会去hdpi中找,发现没有图片,最终在xxhpi中找到.终于找 ...
- Intent传递对象的两种方法
Android为intent提供了两种传递对象参数类型的方法 分别需要使实体类实现Serializable接口.Parcelable接口 首先我们要知道,传递对象,需要先将对象序列化 一.那么为什么要 ...
- IOS客户端Coding项目记录(四)
1:打开Xcode,然后闪退,报加载某库出现异常 如/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolc ...
- OC中的内存问题
常见的内存问题有以下几种: 1.野指针异常:访问没有所有权的内存,如果想要安全的访问,必须确保空间还在 2.内存泄露:空间使用完之后没有及时释放 3.过度释放:对同一块存储空间释放多次,立刻crash ...