24.Android之Paint和canvas简单应用学习

在Android中需要通过graphics类来显示2D图形,graphics中包括了Canvas(画布)、Paint(画笔)、Color(颜色)、Bitmap(图像)等常用的类。graphics具有绘制点、线、颜色、2D几何图形、图像处理等功能。

1.Paint(画笔)类

要绘制图形,首先得调整画笔,按照自己的开发需要设置画笔的相关属性。Pain类的常用属性设置方法如下:

setAntiAlias(); //设置画笔的锯齿效果

setColor(); //设置画笔的颜色

setARGB(); //设置画笔的A、R、G、B值

setAlpha(); //设置画笔的Alpha值

setTextSize(); //设置字体的尺寸

setStyle(); //设置画笔的风格(空心或实心)

setStrokeWidth(); //设置空心边框的宽度

getColor(); //获取画笔的颜色

2.Canvas(画布)类

drawRect(RectF rect, Paint paint) //绘制区域,参数一为RectF一个区域

drawPath(Path path, Paint paint) //绘制一个路径,参数一为Path路径对象

drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint) //贴图,参数一就是我们常规的Bitmap对象,参数二是源区域(这里是bitmap),参数三是目标区域(应该在canvas的位置和大小),参数四是Paint画刷对象,因为用到了缩放和拉伸的可能,当原始Rect不等于目标Rect时性能将会有大幅损失。

drawLine(float startX, float startY, float stopX, float stopY, Paintpaint) //画线,参数一起始点的x轴位置,参数二起始点的y轴位置,参数三终点的x轴水平位置,参数四y轴垂直位置,最后一个参数为Paint 画刷对象。

drawPoint(float x, float y, Paint paint) //画点,参数一水平x轴,参数二垂直y轴,第三个参数为Paint对象。

drawText(String text, float x, floaty, Paint paint) //渲染文本,Canvas类除了上面的还可以描绘文字,参数一是String类型的文本,参数二x轴,参数三y轴,参数四是Paint对象。

drawOval(RectF oval, Paint paint)//画椭圆,参数一是扫描区域,参数二为paint对象;

drawCircle(float cx, float cy, float radius,Paint paint)// 绘制圆,参数一是中心点的x轴,参数二是中心点的y轴,参数三是半径,参数四是paint对象;

drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)//画弧,参数一是RectF对象,一个矩形区域椭圆形的界限用于定义在形状、大小、电弧,参数二是起始角(度)在电弧的开始,参数三扫描角(度)开始顺时针测量的,参数四是如果这是真的话,包括椭圆中心的电弧,并关闭它.

下面看一个自己写的简单例子:

首先,我们需要自定义一个类,比如MyView,继承于View类。然后,复写View类的onDraw()函数。最后,在onDraw()函数中使用Paint和Canvas对象绘制我们需要的图形。

代码如下:

 1 package com.example.paint_canvasdemo;
 2 
 3 import android.content.Context;
 4 import android.graphics.Canvas;
 5 import android.graphics.Color;
 6 import android.graphics.Paint;
 7 import android.graphics.Paint.Style;
 8 import android.view.View;
 9 import java.lang.Math;
10 
11 public class MyView extends View {
12     
13     private int screenW, screenH;    //用于屏幕的宽高
14 
15     public MyView(Context context) {
16         super(context);
17         // TODO Auto-generated constructor stub
18     }
19 
20     protected void onDraw(Canvas canvas) {
21         super.onDraw(canvas);
22         //获得屏幕的宽和高
23         screenW = this.getWidth();
24         screenH = this.getHeight();
25         
26         Paint paint_circle = new Paint();
27         // 设置颜色
28         paint_circle.setColor(Color.BLUE);
29         // 设置空心 Style.FILL为实心
30         paint_circle.setStyle(Style.STROKE);
31         // 消除锯齿
32         paint_circle.setAntiAlias(true);
33         // 设置空心线宽
34         paint_circle.setStrokeWidth(10);
35         // 画圆形
36         canvas.drawCircle(screenW/2, screenH/2, 200, paint_circle);
37         
38         // 绘制正方形 
39         paint_circle.setColor(Color.RED);
40         int x1 = (int) Math.sqrt(2);
41         int rect_xy = 200 * x1 / 2;
42         canvas.drawRect( screenW/2-rect_xy, screenH/2-rect_xy , screenW/2+rect_xy, screenH/2+rect_xy, paint_circle);  
43     }
44 
45 }

然后修改下MainActivity.java代码即可:

 1 package com.example.paint_canvasdemo;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 
 6 public class MainActivity extends Activity {
 7 
 8     @Override
 9     protected void onCreate(Bundle savedInstanceState) {
10         super.onCreate(savedInstanceState);
11         //setContentView(R.layout.activity_main);
12         setContentView(new MyView(this));
13     }
14 
15  
16 }

运行效果:

原文地址:https://www.cnblogs.com/benchao/p/5110369.html