画多条线的方法
drawLines(@Size(multiple=4) @NonNull float[] pts, @NonNull Paint paint) drawLines(@Size(multiple=4) @NonNull float[] pts, int offset, int count,@NonNull Paint paint) 1.2.1 drawLine 画一条线drawLine()方法就一个,没有重载方法。画规则曲线可以考虑使用Path
private void init() { mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setColor(Color.parseColor("#FF4081")); mPaint.setStrokeWidth(10f); } protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawLine(100f,100f,600f,500f,mPaint); }
画直线
方法参数也很简单,四个参数确定两个点的坐标,然后两点一线
1.2.2 drawLines画多条直线两个参数的drawsLines(float[] pts, Paint paint)方法简单使用
private void init() { mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setColor(Color.parseColor("#FF4081")); mPaint.setStrokeWidth(10f); floats = new float[]{100f,100f,300f,300f,400f,200f,600f,200f};//每4个数一组,确定两个点的坐标 } protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawLines(floats,mPaint); }
画多条直线
方法源码中有这样一个@Size(multiple=4)注解,要求floats中每4个值看做一组,每组来确定一条直线的两个端点,不足4个的部分是无效的
两个参数的方法内部还是调用了四个参数的方法,在源码中
public void drawLines(@Size(multiple=4) @NonNull float[] pts, @NonNull Paint paint) { drawLines(pts, 0, pts.length, paint); }在drawLines(float[] pts, int offset, int count,Paint paint)中,
简单修改代码
canvas.drawLines(floats,4,floats.length-4,mPaint);就只会画出(400f,200f),(600f,200f)确定的那条水平的短线
1.3 画Potion方法同1.2画Line方法一样,画点的方法也是有两种,画一个点和画多个点
画一个点很简单,直接看画多个点
drawPoints(@Size(multiple=2) float[] pts, int offset, int count,@NonNull Paint paint)根据方法内的注解得知,pts的大小要大于2,并且每两个一组,多余的无效
简单使用:
private void init() { mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setColor(Color.parseColor("#FF4081")); mPaint.setStrokeWidth(10f); floats = new float[]{100f,100f,300f,200f,200f}; } protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawPoints(floats,mPaint); }
绘制两个点
在floats中,有5个值,但实际有效的也就是前4个
1.3 drawPath 方法在Android 自定义View学习(三)——Paint绘制文字属性中学习了解了setPathEffect(PathEffect effect)方法在绘制路径时的效果,drawPath()方法往往都会配合PahtEffect来使用
drawPath(@NonNull Path path, @NonNull Paint paint)方法只有一个,简单使用
private void init() { mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setColor(Color.parseColor("#FF4081")); mPaint.setStyle(Paint.Style.STROKE);//设置风格为空心 mPaint.setStrokeWidth(10f); path = new Path(); path.moveTo(540f,50f); path.lineTo(740f,300f); path.lineTo(340f,300f); path.close();//形成闭合 将(340,300)和(540,50)连接起来 } protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawPath(path, mPaint); }
绘制等腰三角形
绘制出一个等腰三角形
主要就是用到Path这个类,这个类有很多方法除了可以绘制直线,还可以绘制曲线
1.3.1 Path类The Path class encapsulates compound (multiple contour) geometric paths consisting of straight line segments, quadratic curves, and cubic curves.
It can be drawn with canvas.drawPath(path, paint), either filled or stroked (based on the paint's Style), or it can be used for clipping or to draw text on a path.
这个类封装了一些可以借助一元直线方程,二远方程曲线,立方曲线的方法来绘制一些较为复杂的组合形式的集合图形,绘制出来的风格则是根据画笔设置的style来决定,也可以剪切或者绘制一段文字在路径上
除了已经用到的moveTo()和lineTo()方法,Path中还有很多add开头的方法。有两个重点方法是quadTo()和cubicTo()方法
1.3.1 quadTo和cubicTo方法