用到Android 中的 2D 绘图,所以做个笔记,在Android中需要通过graphics类来显示2D图形。graphics中包括了Canvas(画布)、Paint(画笔)、Color(颜色)、Bitmap(图像)等常用的类。graphics具有绘制点、线、颜色、2D几何图形、图像处理等功能。在 Android 中绘制任何图形都需要在 Canvas 上进行,而要使用 Canvas 就必须使用 View.onDraw() 方法完成绘制工作,因此需要我们编写一个继承自 View 的类,并覆盖 onDraw() 方法。下面来详细介绍 Android 中绘图的基础内容。

1.Color(颜色)类

Android系统中颜色的常用表示方法有以下3种:
(1)int color = Color.BLUE;
(2)int color = Color.argb(150,200,0,100);
(3)在xml文件中定义颜色;

2.Paint(画笔)类

要绘制图形,首先得调整画笔,按照自己的开发需要设置画笔的相关属性。Pain类的常用属性设置方法如下:
setAntiAlias();
//设置是否使用抗锯齿功能,会消耗较大资源,绘制图形速度会变慢。
setColor();
//设置画笔的颜色
setARGB();
//设置画笔的A、R、G、B值
setAlpha();
//设置画笔的Alpha值
setTextSize();
//设置字体的尺寸
setStyle();
//设置画笔的样式,为FILL,FILL_OR_STROKE,或STROKE
setStrokeWidth();
//设置空心边框的宽度
setStrokeCap();
//当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的图形样式,如圆形样式 Cap.ROUND,或方形样式Cap.SQUARE
更多的Paint函数说明请看http://blog.sina.com.cn/s/blog_783ede0301012ilk.html

3.Canvas(画布)类

画笔属性设置好之后,还需要将图像绘制到画布上。Canvas类可以用来实现各种图形的绘制工作,如绘制直线、矩形、圆等等。Canvas绘制常用图形的方法如下:
绘制点:
drawPoint(float x,float y,Paint paint) 用于在指定点绘制一个点
drawPoints(float [] pts,int offset,int count,Paint paint) 方法用于从 pts 中的第 offest 个位置起选取 count 个元素作为多个点的坐标,因此 count 为偶数,当 count 为基数时,将忽略最后一个元素。
drawPoints(float [] pts,Paint paint) 方法是 drawPoints() 的重载方法,所有坐标都将参与绘制过程。
绘制直线:
drawLine(float startx,float starty,loat stopx,float stopy,Paint paint) 方法用于在点 (startx,starty) 和点 (stopx,stopy) 之间绘制一条直线
drawLines(float [] pts,int offset,int count,Paint paint) 方法定义类似于 drawPoints() 方法
drawLines(float [] pts,Paint paint) 方法定义类似于 drawPoints() 方法
绘制矩形:
drawRect(float x1,float y1,float x2,float y2,Paint paint) 方法用于绘制左上角顶点为 (x1,y1), 右下角顶点为 (x2,y2) 的矩形
drawRect(Rect rect,Paint paint) 用于绘制一个指定的矩形
绘制圆形:
drawCircle(float cx,float cy,float r,Paint paint) 方法将绘制一个以 (cx,cy) 为圆心, r 为半径的圆。
绘制字符:
drawText(String s, float x, float y, Paint paint)方法将在 (x,y) 处绘制字符串 s.
绘制图形:
canvas.drawBirmap(Bitmap bitmap, float left, float top, Paint paint);
绘制弧线
drawArc(Rect rect,float startAngle,float sweepAngle,bool useCenter,Paint paint) 方法用于在矩形 rect 内部 ( 此矩形并不会绘制 ) 绘制一个起始角度为 startAngle ,结束角度为 sweepAngle 的弧, useCenter 将决定这段弧是否会显示起点与终点的连线。当 sweepAngle-startAngle 〉 =360 时,绘制效果是一个椭圆。

位置转换
translate作用就是移动原点,默认的原点(0,0)是在屏幕左上角的,你可以通过translate(x,y)把点(x,y)作为原点.
更多解释 http://www.bkjia.com/Androidjc/996439.html

4.实践

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(new CustomView(this));    }    //自定义一个类,继承于View类    class CustomView extends View {        Paint paint;        @Override        protected void onDraw(Canvas canvas) {            paint.setAntiAlias(true);            paint.setStyle(Paint.Style.STROKE);            canvas.translate(canvas.getWidth() / 2, 200);            canvas.drawCircle(0, 0, 100, paint);            canvas.save();            canvas.translate(-75, -75);            Path path = new Path();            path.addArc(new RectF(0, 0, 150, 150), -180, 180);            Paint citePaint = new Paint(paint);            citePaint.setTextSize(14);            citePaint.setStrokeWidth(1);            canvas.drawTextOnPath("http://www.android777.com", path, 28, 0, citePaint);            canvas.restore();            Paint tmpPaint = new Paint(paint); //小刻度画笔            tmpPaint.setStrokeWidth(1);            float y = 100;            int count = 60; //总刻度数            for (int i = 0; i < count; i++) {                if (i % 5 == 0) {                    canvas.drawLine(0f, y, 0, y + 12f, paint);                    canvas.drawText(String.valueOf(i / 5 + 1), -4f, y + 25f, tmpPaint);                } else {                    canvas.drawLine(0f, y, 0f, y + 5f, tmpPaint);                }                canvas.rotate(360 / count, 0f, 0f); //旋转画纸            }            tmpPaint.setColor(Color.GRAY);            tmpPaint.setStrokeWidth(4);            canvas.drawCircle(0, 0, 7, tmpPaint);            tmpPaint.setStyle(Paint.Style.FILL);            tmpPaint.setColor(Color.YELLOW);            canvas.drawCircle(0, 0, 5, tmpPaint);            canvas.drawLine(0, 10, 0, -65, paint);        }        public CustomView(Context context) {            super(context);            paint = new Paint();            paint.setColor(Color.RED);            paint.setStrokeJoin(Paint.Join.ROUND);            paint.setStrokeCap(Paint.Cap.ROUND);            paint.setStrokeWidth(3);        }    }}

实现效果

参考博客
http://www.cnblogs.com/menlsh/archive/2012/11/18/2776003.html
http://www.tuicool.com/articles/YFraUf
http://892848153.iteye.com/blog/1906496
http://www.bkjia.com/Androidjc/996439.html
http://blog.csdn.net/vincent_czz/article/details/6613698
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0309/2573.html
http://blog.csdn.net/harvic880925/article/details/38926877

http://blog.csdn.net/duguang77/article/details/40869079

更多相关文章

  1. Android蓝牙开发浅析
  2. android面试题总结
  3. ListView setOnItemClickListener无效原因分析
  4. [置顶] 一步一步学android OpenGL ES2.0编程(1)
  5. android sqlite 数据类型
  6. 在android中创建圆角的文本框的实现
  7. 详解Android主流框架不可或缺的基石
  8. Android控件阴影效果的几种实现方法
  9. Android(安卓)防界面劫持方案,无视Android系统版本限制,无需操作栈

随机推荐

  1. Android原始XML的读写操作
  2. Android(安卓)DHT11驱动
  3. android百度地图标记点代码
  4. Android(安卓)_Android登录对话框实现(1)
  5. 直播源码Android实现 曲线路径动画
  6. android 读取 icon
  7. Android开发实现HttpClient工具类
  8. Android系统启动-SystemServer下篇
  9. 第一番 Android(安卓)不能进行debug调试
  10. 解决Android(安卓)studio 启动报错java.l