Android:Android2D绘图
2015-10-01 17:21
495 查看
用到Android 中的 2D 绘图,所以做个笔记,在Android中需要通过graphics类来显示2D图形。graphics中包括了Canvas(画布)、Paint(画笔)、Color(颜色)、Bitmap(图像)等常用的类。graphics具有绘制点、线、颜色、2D几何图形、图像处理等功能。在 Android 中绘制任何图形都需要在 Canvas 上进行,而要使用 Canvas 就必须使用 View.onDraw() 方法完成绘制工作,因此需要我们编写一个继承自 View 的类,并覆盖 onDraw() 方法。下面来详细介绍 Android 中绘图的基础内容。
(1)int color = Color.BLUE;
(2)int color = Color.argb(150,200,0,100);
(3)在xml文件中定义颜色;
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
绘制点:
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
实现效果
参考博客
/article/4888498.html
http://www.tuicool.com/articles/YFraUf
/article/3991900.html
http://www.bkjia.com/Androidjc/996439.html
/article/8897774.html
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0309/2573.html
/article/2594032.html
http://blog.csdn.net/duguang77/article/details/40869079
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); } } }
实现效果
参考博客
/article/4888498.html
http://www.tuicool.com/articles/YFraUf
/article/3991900.html
http://www.bkjia.com/Androidjc/996439.html
/article/8897774.html
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0309/2573.html
/article/2594032.html
http://blog.csdn.net/duguang77/article/details/40869079
相关文章推荐
- Android ViewHolder的作用与用法 详解
- Android基础入门教程——2.6 菜单(Menu)
- android-----自定义ToggleButton
- 10.1 Android Studio入手
- [Android基础]文件读写操作
- 安卓(android)五大布局总结以及实例演示
- A UML Model for Mobile Game on the Android OS
- Android--Intent常用(拨号,浏览器,联系人,Wi-Fi)
- android TextView不用ScrollViewe也可以滚动的方法
- 安卓(android)开发框架的说明2:基于Android Studio的安卓工程开发目录介绍
- Android版本更新之本地数据库更新
- 【转】--在Android源码树中添加userspace I2C读写工具(i2c-util)
- Android重力加速度传感器数据去噪
- 笔记:Android-Content Provider
- Android之Android Studio三种方式导入外部资源 以及 报错处理
- Android:Error retrieving parent for item: No resource found that matches the given name解决方法
- Android 事件处理详解(二) —— 基于回调的事件处理
- android模拟器
- Android 事件处理详解(一) —— 基于监听的事件处理 2
- Android studio使用git-android学习之旅(79)