Android学习笔记:Paint及Canvas的简单应用=
- 格式:docx
- 大小:103.41 KB
- 文档页数:4
Canvas画布1.canvas标签严禁使用CSS调整canvas画布的大小。
<canvas width="600" height="600">您的破浏览器有不支持了!</canvas>2.canvas的属性Width 用户设置canvas画板的宽度Height 用于设置canvas画板的高度。
使用CSS可以设置canvas画布的显示大小无法设置其绘图面积,所以不推荐使用。
3.canvas的方法getContext() 用于获取canvas元素的绘图环境,所有绘图操作必须在绘图环境下操作.绘图环境也叫做绘图上下文。
Canvas元素.getContext(‘2d’); 获取2D绘图环境4.绘图操作(绘图环境的成员context.font属性用于设置字体的风格大小和0字体类型等格式:context.font([粗体],[斜体],大小,字体);该属性设置对描边文字和填充文字都有效context.fillStyle属性用于设置填充类型的画笔的样式格式:context.fillStyle=’颜色值’所有CSS3的颜色类型都可以支持context.strokeStyle属性用于设置描边类型的画笔的样式格式:context.strokeStyle=’颜色’;注意:设置style时一般使用颜色设置,实际上可以使用渐变设置但是需要渐变对象。
所以不叫strokeColor而是叫strokeStyleContext.fillText() 方法用于使用填充画笔进行文字绘制格式:context.fillText(‘文字内容’,x坐标,y坐标);Context.strokeText()方法用描边画笔进行文字绘制格式:context.strokeText(‘文字内容’,x坐标,y坐标);Context.moveTo() 将画笔移动到指定的位置格式:context.moveTo(x1,y1);Context.lineTo() 将画笔从开始位置连线到结束位置格式:contxt.lineTo(x2,y2);注意:使用路径操作时,绘制方法只是在内存中进行预先绘制,并没有实际操作到画布当中,如果需要画布中显示,则需要封闭路径的相关操作。
千锋3G学院-Android游戏开发教程-数独-第3讲的笔记相关课时:千锋3G学院-Android游戏开发教程-数独-第3讲Paint paint = new Paint();paint.setColor(Color.BLACK);// 设置画笔透明度以及RGB属性1、a(透明度)1~255越小越透明。
2、R(红色)0~255越小越淡。
3、G(绿色)// 0~255。
4、B(蓝色)0~255。
paint.setARGB(200, 5, 100, 230);// 设置抗锯齿注:设置这个属性后会消耗大量资源,绘制图形时会变慢。
paint.setAntiAlias(true);// 设置画笔的大小,也就是粗细。
paint.setStrokeWidth(1);// 设置画笔的样式。
1、STROKE:空心图不填充颜色,paint.setStyle(Style.STROKE);// 绘制矩形,1、左边界的位置,2、上边界的位置,3、有边界的位置,4、下边界的位置。
paint.setTextSize(100);canvas.drawRect(200, 100, 300, 400, paint);// 绘制一条线,前俩个参数是x,y的起始位置的坐标,后俩个是x,y的终止位置的坐标。
canvas.drawLine(100, 100, 400, 400, paint);// 绘制圆形,前两个是圆心x,y坐标,radius:是圆的半径。
canvas.drawCircle(200, 200, 50, paint);canvas.drawText("appde", 150, 300, paint);canvas.drawBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher),300,100,paint);Paint backgroundpaint = new Paint();backgroundpaint.setColor(getResources().getColor(R.color.BackgroundColor));canvas.drawRect(0, 0, getWidth(), getHeight(), backgroundpaint);Paint blackpaint = new Paint();blackpaint.setColor(getResources().getColor(R.color.black));Paint strikingpaint = new Paint();strikingpaint.setColor(getResources().getColor(R.color.Striking));Paint brightpaint = new Paint();brightpaint.setColor(getResources().getColor(R.color.Bright));for (int i = 0; i < 9; i++) {canvas.drawLine(0, i * height, getWidth(), i * height,strikingpaint);canvas.drawLine(0, i * height + 1, getWidth(), i * height + 1, brightpaint); canvas.drawLine(i * width, 0, i * width, getHeight(), strikingpaint); canvas.drawLine(i * width + 1, 0, i * width + 1, getHeight(), brightpaint); }for (int i = 0; i < 9; i++) {if (i % 3 != 0) {continue;}canvas.drawLine(0, i * height, getWidth(), i * height, blackpaint); canvas.drawLine(0, i * height + 1, getWidth(), i * height + 1, brightpaint); canvas.drawLine(i * width, 0, i * width, getHeight(), blackpaint); canvas.drawLine(i * width + 1, 0, i * width + 1, getHeight(), brightpaint); }Paint textpaint = new Paint();textpaint.setColor(Color.BLACK);textpaint.setStyle(Paint.Style.STROKE);textpaint.setTextSize(height * 0.75f);textpaint.setTextAlign(Paint.Align.CENTER);float x = width / 2;canvas.drawText("1", 3 * width + x, 61, textpaint);千锋3G学院-Android游戏开发教程-数独-第4讲的笔记相关课时:千锋3G学院-Android游戏开发教程-数独-第4讲public class Game {private final String str = "360000000004230800000004200"+ "070460003820000014500013020"+ "001900000007048300000000045";private int [] soduku = new int [9*9];public Game(){soduku = fromPuzzleString(str);}// 根据9宫格的坐标,返回坐标的格子中的数据;private int getTile(int x, int y){return soduku[y* 9 + x];}public String getTileString(int x, int y){int v = getTile(x,y);if(v == 0){return "";}else{return String.valueOf(v);}}protected int[] fromPuzzleString(String src){int[] sudo = new int[str.length()];for(int i = 0;i < sudo.length;i++){sudo[i] = str.charAt(i) - '0';}return sudo;}}//画字体Paint textpaint = new Paint();textpaint.setColor(Color.BLACK);textpaint.setStyle(Paint.Style.STROKE);textpaint.setTextSize(height * 0.75f);textpaint.setTextAlign(Paint.Align.CENTER);textpaint.setAntiAlias(true);//计算字体大小FontMetrics fm = textpaint.getFontMetrics();float x = width / 2;float y = height / 2 - (fm.ascent + fm.descent)/2;for(int i = 0 ;i < 9 ;i++){for(int j = 0 ; j < 9 ; j++){canvas.drawText(new Game().getTileString(i, j), i * width + x,j * height + y, textpaint); }}千锋3G学院-Android游戏开发教程-数独-第5讲的笔记相关课时:千锋3G学院-Android游戏开发教程-数独-第5讲//取出不可用的数据;public int[] getUsedTilesByCoor(int x, int y){return used[x][y];}//计算单元格中不可用的数据;public int[] calculateUsedTiles(int x, int y){ int [] c = new int[9];//计算Y轴方向不可用数据;for(int i = 0; i < 9; i ++){if( i == y ){continue;}int t = getTile(x,i);if(t!=0){c[t-1]=t;}}//计算X轴方向不可用数据:for(int i = 0; i < 9 ; i++){if(i == x){continue;}int t = getTile(i,y);if(t != 0){c[t-1] = t;}}//计算小九宫格不可用数据;int startx = (x / 3) * 3;int starty = (y / 3) * 3;for(int i = startx; i < startx + 3; i++){for(int j = starty; j < starty + 3; j++){if(i == x && j == y){continue;}int t = getTile(i,j);if(t != 0 ){c[t-1] = t;}}}int nused = 0;for(int t : c){if(t != 0){nused ++;}}int [] c1 = new int[nused];nused = 0 ;for(int t : c){if(t != 0){c1[nused++] = t;}}return c1;}//获取屏幕点击的焦点@Overridepublic boolean onTouchEvent(MotionEvent event) {if(event.getAction() != MotionEvent.ACTION_DOWN){return super.onTouchEvent(event);}int selectedX = (int)(event.getX()/width);int selectedY = (int)(event.getY()/height);int used[] = game.getUsedTilesByCoor(selectedX, selectedY); for(int i = 0 ; i < used.length ; i++){System.out.println(used[i]);}return true;}千锋3G学院-Android游戏开发教程-数独-第6讲的笔记相关课时:千锋3G学院-Android游戏开发教程-数独-第6讲//可以分成2大块来看!!!//1、第一块是创建View,把自定义的布局文件转换成View对象; LayoutInflater layout = LayoutInflater.from(this.getContext());View layoutView = layout.inflate(yout.dialog, null);TextView textView = (TextView) layoutView.findViewById(R.id.textID); textView.setText(sb.toString());//2、创建Dialog对象并把设置好的View填充进去;AlertDialog.Builder builder = new AlertDialog.Builder(this.getContext()); builder.setView(layoutView);AlertDialog dialog = builder.create();dialog.show();千锋3G学院-Android游戏开发教程-数独-第7讲的笔记相关课时:千锋3G学院-Android游戏开发教程-数独-第7讲public class MyDialog extends Dialog {private final View[] keys = new View[9];private final int[] used;public MyDialog(Context context, int[] used) {super(context);ed = used;}// Dialog第一次显示时调用onCreate方法;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 设置Dialog的标题和布局文件;setTitle("KeyDialog");setContentView(yout.dialog);// 调用这个方法取得封装的Button控件;findViews();//遍历整个used数组,得到不可用的数据;for (int i = 0; i < used.length; i++) {if (used[i] != 0) {//根据used得到的数据,把可以用的数据赋值给Button控件,//设置keys数组里的按钮是否可见,INVISIBLE参数为不可见; keys[used[i]-1].setVisibility(View.INVISIBLE);}}}private void findViews() {keys[0] = findViewById(R.id.NO1);keys[1] = findViewById(R.id.NO2);keys[2] = findViewById(R.id.NO3);keys[3] = findViewById(R.id.NO4);keys[4] = findViewById(R.id.NO5);keys[5] = findViewById(R.id.NO6);keys[6] = findViewById(R.id.NO7);keys[7] = findViewById(R.id.NO8);keys[8] = findViewById(R.id.NO9);}}。
如何使用JavaScript实现Canvas绘图和动画使用JavaScript来实现Canvas绘图和动画是一种常见的技术,它可以实现各种各样的图形效果和动态交互,非常适合用于创建各种类型的网页动画和游戏。
在本文中,我将详细介绍如何使用JavaScript来绘制图形、实现动画以及一些常用的绘图和动画效果。
一、构建Canvas元素为了开始绘制和动画,我们首先需要在HTML文档中创建一个Canvas元素。
Canvas是HTML5中新增的元素,它提供了一个绘制2D 图形的区域,我们可以通过JavaScript来操纵它。
在HTML文档的body标签中添加以下代码:```<canvas id="myCanvas" width="500" height="300"></canvas> ```上面的代码创建了一个id为myCanvas的Canvas元素,宽度为500像素,高度为300像素。
二、获取Canvas上下文要绘制图形或进行动画,我们需要获取Canvas的上下文对象。
在JavaScript中,我们可以使用`getContext()`方法来获取上下文对象。
在JavaScript中,使用以下代码获取Canvas上下文对象:```const canvas = document.getElementById('myCanvas');const ctx = canvas.getContext('2d');```上面的代码通过`getElementById`方法获取了id为myCanvas的Canvas元素,然后通过`getContext`方法获取了2D上下文对象ctx。
三、绘制基本图形下面介绍如何使用JavaScript在Canvas上绘制一些基本图形,例如矩形、圆形和直线。
Canvas提供了一系列的API可以用于绘制图形。
javafx canvas 代码例子JavaFX是一个用于构建富客户端应用程序的GUI工具包。
其中的Canvas类提供了一个可自定义绘图表面,可以用于绘制图形、文本和图像等元素。
下面是10个使用JavaFX Canvas的代码例子:1. 绘制简单的图形:```Canvas canvas = new Canvas(400, 300); GraphicsContext gc = canvas.getGraphicsContext2D();gc.setFill(Color.RED);gc.fillRect(50, 50, 200, 100);```这段代码创建了一个400x300的Canvas对象,并在其上绘制了一个红色的矩形。
2. 绘制文本:```Canvas canvas = new Canvas(400, 300); GraphicsContext gc = canvas.getGraphicsContext2D();gc.setFont(Font.font("Arial", FontWeight.BOLD, 24));gc.fillText("Hello, JavaFX!", 50, 100);```这段代码创建了一个400x300的Canvas对象,并在其上绘制了一个带有粗体的Arial字体的文本。
3. 绘制线条:```Canvas canvas = new Canvas(400, 300); GraphicsContext gc = canvas.getGraphicsContext2D();gc.setStroke(Color.BLUE);gc.setLineWidth(2);gc.strokeLine(50, 50, 200, 200);```这段代码创建了一个400x300的Canvas对象,并在其上绘制了一条蓝色的线段。
4. 绘制圆形:```Canvas canvas = new Canvas(400, 300); GraphicsContext gc = canvas.getGraphicsContext2D();gc.setFill(Color.GREEN);gc.fillOval(100, 100, 100, 100);```这段代码创建了一个400x300的Canvas对象,并在其上绘制了一个绿色的圆形。
一、Canvas类android.graphics.CanvasCanvas类好比手机中的画纸,我们可以在Canvas上画图形或者图像。
一般我们用android来绘画的时候,需要四个组成部分:1、位图:包含像素2、Canvas画板:包含绘画内容,写入位图3、初始图形:如Rect、Bitmap、text等4、Paint:用来描述上面初始图形的颜色和类型等Canvas类提供了三个构造方法:Public Canvas();构造一个默认无参的Canvas对象Public Canvas(Bitmap bitmap);根据一个Bitmap构造一个Canvas 对象Public Canvas(GL gl);根据一个GL来构造一个对象下面我们来了解一下Canvas类提供的方法:在Canvas类提供的方法中比较多经常用的是以draw开头的方法,draw开头的方法很容易理解就是向画板中画图形,比如可以向Canvas中画位图,给图形填充颜色等。
二、Paint类android.graphics.PaintPaint类包含有用来画几何图形、文本、位图的类型和颜色等信息,如果把Canvas类看作是画板,那我们可以把Paint类看做是画笔,可以根据需要画出不同颜色和样式的图形、文本等内容。
Paint类有三个构造方法:Public Paint()构造一个缺省的Paint对象PublicPaint(int flags);根据指定的flags来构造一个Paint对象,创建之后可以用setFlags()方法来更改Public Paint(Paint paint)根据指定的paint对象来构造一个Paint对象Paint类提供了很多方法来设置和获取Paint对象的属性,比如:public int getColor ()获得Paint对象的颜色值public ColorFilter getColorFilter ()获得颜色过滤器public float getT extSize ()获得字体大小数值public void setStyle (Paint.Style style)设置paint的类型三Color类android.graphics.Color此类定义了一些方法来创建和转换颜色值。
js中canvas用法一、概述Canvas是HTML5中新增的一个元素,它提供了一种在网页上绘制图形的方式。
使用Canvas,我们可以创建各种复杂的图形、动画、以及与用户的交互。
JavaScript是一种常用于网页开发的脚本语言,它可以与Canvas元素无缝结合,实现丰富的网页功能。
二、Canvas的基本用法1. 创建Canvas元素在HTML文档中,可以通过`<canvas>`元素来创建Canvas。
可以通过`width`和`height`属性来设置Canvas的大小。
```html<canvas id="myCanvas" width="500" height="500"></canvas> ```2. 获取Canvas上下文可以通过`document.getElementById`方法获取Canvas的上下文,然后对其进行操作。
```javascriptvar canvas = document.getElementById('myCanvas');var ctx = canvas.getContext('2d');```3. 绘制图形使用Canvas的上下文,我们可以绘制各种图形,如线、矩形、圆形、文本等。
* 绘制线:`ctx.strokeRect(x, y, width, height);`* 绘制矩形:`ctx.fillRect(x, y, width, height);`* 绘制圆形:`ctx.fillCircle(x, y, radius);`* 绘制文本:`ctx.fillText('文本内容', x, y);`4. 绘制渐变和纹理Canvas还支持绘制渐变和纹理,用于填充图形。
* 绘制渐变:`ctx.createLinearGradient(x1, y1, x2, y2);`* 使用纹理:需要先加载图片,然后将图片转换为纹理,再应用到Canvas上。
主题:canvascontext.draw原理一、canvas简介Canvas是HTML5新增的标签,用于在网页上绘制图形、动画和其他视觉效果。
Canvas可以通过Javascript来动态生成图形,实现丰富的交互效果。
在Canvas中,使用2D上下文(context)来绘制图形,而canvascontext.draw是其中一个重要的绘制方法。
二、canvascontext.draw的作用canvascontext.draw方法是用于在Canvas上绘制图形的函数,可以绘制路径、填充颜色、描边等操作。
通过canvascontext.draw方法,可以实现各种复杂的图形绘制,包括直线、曲线、矩形、圆形等。
三、canvascontext.draw的原理canvascontext.draw方法的原理主要包括以下几个方面:1. 创建绘制路径在使用canvascontext.draw方法之前,需要先创建绘制路径。
绘制路径是指定义图形的轮廓,包括起点、终点以及各个控制点。
通过canvas提供的路径绘制方法,可以创建直线、曲线、矩形、圆形等各种形状的路径。
2. 设置绘制样式在绘制路径之后,需要设置绘制样式,包括填充颜色、描边颜色、线条粗细、阴影效果等。
通过canvas提供的样式设置方法,可以对绘制路径进行填充或描边,并实现丰富的视觉效果。
3. 调用canvascontext.draw方法当路径和样式设置完成之后,就可以调用canvascontext.draw方法来进行实际的绘制操作。
canvascontext.draw方法会按照路径的定义和样式的设置,绘制出具体的图形效果。
4. 渲染到Canvas上绘制完成的图形会被渲染到Canvas上,展现给用户。
用户可以在Canvas上看到绘制出的图形,并与之进行交互。
四、canvascontext.draw方法的参数canvascontext.draw方法可以接受多个参数,用于指定绘制的具体内容和样式。
canvas 高级用法Canvas是HTML5中的一个绘图API,它提供了丰富的功能用于在网页上绘制2D图形。
除了基本的绘制图形和渲染文本之外,Canvas还有一些高级用法,如下:1.图片处理:Canvas提供了多种方法用于加载、显示和处理图像。
可以使用drawImage()方法将图像绘制到Canvas上,并可以应用变换、裁剪等操作来对图像进行处理。
2.图形变换:Canvas支持多种图形变换操作,如旋转、缩放、平移和倾斜等。
可以使用transform()和setTransform()方法进行变换,并可以使用save()和restore()方法保存和恢复转换状态。
3.绘制路径:Canvas提供了一些方法用于绘制复杂的路径,如moveTo()、lineTo()、arc()、quadraticCurveTo()等。
可以使用这些方法创建任意形状的路径,并可以使用fill()和stroke()方法来填充或描边路径。
4.渐变和阴影效果:Canvas支持线性渐变、径向渐变和阴影效果的绘制。
可以使用createLinearGradient()和createRadialGradient()方法创建渐变对象,并可以使用createShadow()方法创建阴影效果。
5.像素操作:Canvas提供了一些方法用于对像素进行操作,如getImageData()、putImageData()、createImageData()等。
可以使用这些方法读取和修改Canvas上的像素数据,从而实现像素级的图像处理。
6.动画效果:Canvas可以实现简单的动画效果,可以使用requestAnimationFrame()方法在页面中创建动画循环,并使用clearRect()方法清除Canvas上的内容,再重新绘制新的帧。
此外,还有一些拓展用法可供进一步探索:7. WebGL:Canvas的一个扩展是WebGL,它是基于OpenGL ES的一个3D绘图API。
AndroidCanvas的drawText()与⽂字居中⽅案详解⾃定义View是绘制⽂本有三类⽅法// 第⼀类public void drawText (String text, float x, float y, Paint paint)public void drawText (String text, int start, int end, float x, float y, Paint paint)public void drawText (CharSequence text, int start, int end, float x, float y, Paint paint)public void drawText (char[] text, int index, int count, float x, float y, Paint paint)// 第⼆类public void drawPosText (String text, float[] pos, Paint paint)public void drawPosText (char[] text, int index, int count, float[] pos, Paint paint)// 第三类public void drawTextOnPath (String text, Path path, float hOffset, float vOffset, Paint paint)public void drawTextOnPath (char[] text, int index, int count, Path path, float hOffset, float vOffset, Paint paint)其中drawText()最常⽤,drawPosText ()是根据⼀个个坐标点指定⽂字位置,drawTextOnPath ()是根据路径绘制。
androidcanvas的drawBitmap1、基本的绘制图⽚⽅法//Bitmap:图⽚对象,left:偏移左边的位置,top:偏移顶部的位置drawBitmap(Bitmap bitmap, float left, float top, Paint paint)2、对图⽚剪接和限定显⽰区域第⼀个Rect 代表要绘制的bitmap 区域,第⼆个 Rect 代表的是要将bitmap 绘制在屏幕的什么地⽅drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint);Rect src: 是对图⽚进⾏裁截,若是空null则显⽰整个图⽚RectF dst:是图⽚在Canvas画布中显⽰的区域,⼤于src则把src的裁截区放⼤,⼩于src则把src的裁截区缩⼩。
此时我先定义两个Rect,mSrcRect 取值为整个Bitmap 区域,mDestRect 取值为view左上⽅和bitmap同样⼤⼩;[html]1. private Rect mSrcRect, mDestRect;[html]1. mSrcRect = new Rect(0, 0, mBitWidth, mBitHeight);2. mDestRect = new Rect(0, 0, mBitWidth, mBitHeight);在onDraw ⾥绘制该位图:[html]1. canvas.drawBitmap(mBitmap, mSrcRect, mDestRect, mBitPaint);画在左上⽅似乎缺乏美感,我们把美⼥画在view的中⼼,没错,我们只需要改变mDestRect:[html]1. // 计算左边位置2. int left = mHalfWidth - mBitWidth / 2;3. // 计算上边位置4. int top = mHalfHeight - mBitHeight / 2;5. mDestRect = new Rect(left, top, left + mBitWidth, top + mBitHeight);位置计算的时候,只需要注意在android屏幕坐标系⾥,左上⾓的位置是(0,0),往右往下为正,此时效果如下:。
Android学习笔记:Paint及Canvas的简单应用在Android中需要通过graphics类来显示2D图形。
graphics中包括了Canvas(画布)、Paint(画笔)、Color(颜色)、Bitmap(图像)等常用的类。
graphics具有绘制点、线、颜色、2D几何图形、图像处理等功能。
1.Color(颜色)类Android系统中颜色的常用表示方法有以下3种:(1)int color = Color.BLUE;(2)int color = Color.argb(150,200,0,100);(3)在xml文件中定义颜色;在实际应用当中,我们常用的颜色有以下一些,其颜色常量及其表示的颜色如下所示:Color.BLACK 黑色Color.GREEN 绿色Color.BLUE 蓝色Color.LTGRAY 浅灰色Color.CYAN 青绿色 Color.MAGENTA 红紫色Color.DKGRAY 灰黑色 Color.RED 红色Color.YELLOW 黄色 Color.TRANSPARENT 透明Color.GRAY 灰色Color.WHITE 白色2.Paint(画笔)类要绘制图形,首先得调整画笔,按照自己的开发需要设置画笔的相关属性。
Pain类的常用属性设置方法如下:setAntiAlias(); //设置画笔的锯齿效果setColor(); //设置画笔的颜色setARGB(); //设置画笔的A、R、G、B值setAlpha(); //设置画笔的Alpha值setTextSize(); //设置字体的尺寸setStyle(); //设置画笔的风格(空心或实心)setStrokeWidth(); //设置空心边框的宽度getColor(); //获取画笔的颜色3.Canvas(画布)类画笔属性设置好之后,还需要将图像绘制到画布上。
Canvas类可以用来实现各种图形的绘制工作,如绘制直线、矩形、圆等等。
Canvas绘制常用图形的方法如下:绘制直线:canvas.drawLine(float startX, float startY, float stopX, float stopY, Paint paint);绘制矩形:canvas.drawRect(float left, float top, float right, float bottom, Paint paint);绘制圆形:canvas.drawCircle(float cx, float cy, float radius, Paint paint);绘制字符:canvas.drawText(String text, float x, float y, Paint paint);绘制图形:canvas.drawBirmap(Bitmap bitmap, float left, float top, Paint paint);4.自定义View的基本实现方法首先,我们需要自定义一个类,比如MyView,继承于View类。
然后,复写View类的onDraw()函数。
最后,在onDraw()函数中使用Paint和Canvas对象绘制我们需要的图形。
5.动手实践在这里,我使用上面提到的一些方法,绘制了一幅简单的北京奥运宣传画,包括奥运五环,“北京欢迎您”的宣传标语以及福娃。
做成后的效果图如图1所示。
图1 Android_OlympicLogo效果图其中,使用了自定义的MyView类,在MyView类中,重写了onDraw()函数,并定义几种不同的画笔,分别用来绘制各种颜色的奥运五环以及绘制字符串“北京欢迎您”等。
具体的M yView.java源代码如下。
1package com.example.android_olympiclogo;23import android.view.View;4import android.content.Context;5import android.graphics.BitmapFactory;6import android.graphics.Canvas;7import android.graphics.Color;8import android.graphics.Paint;9import android.graphics.Paint.Style;1011public class MyView extends View {1213public MyView(Context context) {14super(context);15}1617public void onDraw(Canvas canvas) {1819Paint paint_blue = new Paint(); //绘制蓝色的环20paint_blue.setColor(Color.BLUE);21paint_blue.setStyle(Style.STROKE);22paint_blue.setStrokeWidth(10);23canvas.drawCircle(110,150,60,paint_blue);2425Paint paint_yellow = new Paint(); //绘制黄色的环26paint_yellow.setColor(Color.YELLOW);27paint_yellow.setStyle(Style.STROKE);28paint_yellow.setStrokeWidth(10);29canvas.drawCircle((float)175.5, 210, 60, paint_yellow);3031Paint paint_black = new Paint(); //绘制黑色的环32paint_black.setColor(Color.BLACK);33paint_black.setStyle(Style.STROKE);34paint_black.setStrokeWidth(10);35canvas.drawCircle(245, 150, 60, paint_black);3637Paint paint_green = new Paint(); //绘制绿色的环38paint_green.setColor(Color.GREEN);39paint_green.setStyle(Style.STROKE);40paint_green.setStrokeWidth(10);41canvas.drawCircle(311, 210, 60, paint_green);4243Paint paint_red = new Paint(); //绘制红色的环44paint_red.setColor(Color.RED);45paint_red.setStyle(Style.STROKE);46paint_red.setStrokeWidth(10);47canvas.drawCircle(380, 150, 60, paint_red);4849Paint paint_string = new Paint(); //绘制字符串50paint_string.setColor(Color.BLUE);51paint_string.setTextSize(20);52canvas.drawText("Welcome to Beijing", 245, 310, paint_string);5354Paint paint_line = new Paint(); //绘制直线55paint_line.setColor(Color.BLUE);56canvas.drawLine(240, 310, 425, 310, paint_line);5758Paint paint_text = new Paint(); //绘制字符串59paint_text.setColor(Color.BLUE);60paint_text.setTextSize(20);61canvas.drawText("北京欢迎您", 275, 330, paint_text);6263//绘制福娃图片64canvas.drawBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.fuwa), 35, 340, paint_line);65}66}此外,还需要将自定义的MyView视图显示到手机屏幕上,所以需要在MainAcitivity.java中加载MyView视图,可以使用setContentView()方法,具体的MainAcitivity.java源代码如下。
1package com.example.android_olympiclogo;23import android.os.Bundle;4import android.app.Activity;5import android.view.Menu;6import android.view.MenuItem;7import android.support.v4.app.NavUtils;89public class MainActivity extends Activity {1011@Override12public void onCreate(Bundle savedInstanceState) {13super.onCreate(savedInstanceState);14// setContentView(yout.activity_main);15setContentView(new MyView(this)); //加载MyView16}1718@Override19public boolean onCreateOptionsMenu(Menu menu) {20getMenuInflater().inflate(R.menu.activity_main, menu);21return true;22}2324}当然了,还需要将福娃的图片放在res下的drawable-hdpi目录下。
这样才可以使用BitmapFactory.decodeResource(getResources(),R.drawable.fuwa)方法加载该图片。