最近想做出绚丽的效果,发现在绘图这块,相当不熟悉,看别人代码,也玩不溜,那只好回来把基础打扎实了,在去偷人家的技术。
这篇博客,就先熟悉一下:Canvas 和 Paint,Path。
Canvas 就相当于一张纸,Paint就相当于一只笔。因此,我们可以设置纸(Canvas )的背景颜色,旋转,移动等。对于笔(Paint),我们可以设置笔的颜色,粗细(即:填充宽度)等。那我们想画什么,有什么决定呢?,答案是:Path。
path是路径,画笔会根据你的路径绘制出相应的图片,当然为了方便,Android Canvas 的一些相关函数可以直接绘制出一些图形,例如:圆,正方形,长方形,椭圆等。
下面,我们就来一起看看代码:
public class Customeview extends View{
public Customeview(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.WHITE);//画布的颜色
/**
* 画笔的相关设置
*/
Paint paint=new Paint();
paint.setAntiAlias(true);//是否抗锯齿
paint.setColor(Color.RED);//画笔颜色
paint.setStyle(Paint.Style.STROKE);//画笔填充样式
paint.setStrokeWidth(4);//设置画笔的笔触宽度
/**
* float cx:圆心x坐标
* loat cy:圆心y坐标
* float radius:半径
* Paint paint:画笔
*/
canvas.drawCircle(40,40,10,paint); //在画布上画一个圆
/**
* 关于drawRect的参数详解,参考我的博客
* 《Android中的DrawRect()理解 》
*/
canvas.drawRect(40,20,80,60,paint);//绘制正方形
/**
* RectF:绘制矩形类,它的四个参数,就跟drawRect的是个参数
* 意义一样,只是RectF的四个参数是浮点型。
*/
RectF rectF=new RectF(160,160,200,200);
canvas.drawRoundRect(rectF,10,10,paint);//绘制圆角矩形
canvas.drawOval(300,330,330,350,paint);//绘制椭圆,你把350,改成360不就是圆形了,为什么,自己去看参数
/**
* 关于画线的具体操作,请看我的这篇博客
* 《 Android paint绘制直线,曲线 》
*/
Path path=new Path();
path.moveTo(400,200);
path.lineTo(380, 280);
path.lineTo(350,250);
path.close();//把这个三个坐标点,形成一个封闭。
canvas.drawPath(path,paint); //绘制三角行
//对于画笔的填充风格的理解///
Paint paintTwo=new Paint();
paintTwo.setStyle(Paint.Style.FILL);
paintTwo.setColor(Color.RED);
canvas.drawCircle(400, 400, 30, paintTwo); //在画布上画一个圆
//设置渐变器后绘制//
Paint paintThree =new Paint();
paintThree.setColor(Color.BLUE);
/**
* float x0:, float y0, float x1, float y1, int color0, int color1, Shader.TileMode tile
* 其中,参数x0表示渐变的起始点x坐标(注意:是相对x);参数y0表示渐变的起始点y坐标(注意:是相对y);
* 参数x1表示渐变的终点x坐标(注意:是相对x1);参数y1表示渐变的终点y坐标(注意:是相对y1);
*
* color0表示渐变开始颜色;color1表示渐变结束颜色;参数tile表示平铺方式。
*
* Shader.TileMode有3种参数可供选择,分别为CLAMP、REPEAT和MIRROR:
* CLAMP的作用是如果渲染器超出原始边界范围,则会复制边缘颜色对超出范围的区域进行着色
* REPEAT的作用是在横向和纵向上以平铺的形式重复渲染位图
* MIRROR的作用是在横向和纵向上以镜像的方式重复渲染位图
*
*/
Shader shader=new LinearGradient(0,80,80,80,new int[]{Color.BLUE,Color.BLACK,Color.YELLOW},
null, Shader.TileMode.REPEAT);
paintThree.setShader(shader);//设置画笔填充效果
/**
* float radius:阴影半径
* float dx:X轴方向的偏移量。
* float dy,:Y轴方向的偏移量
* int shadowColor:阴影颜色
*/
paintThree.setShadowLayer(20,20,20,Color.GRAY);//设置阴影,这个方法不支持硬件加速,所以我们要测试时必须关闭硬件加速。
//关闭硬件加速。
setLayerType(LAYER_TYPE_SOFTWARE, null);
canvas.drawCircle(280, 460, 40, paintThree); //在画布上画一个圆
/设置字符大小后绘制
Paint paintFour =new Paint();
paintFour.setColor(Color.BLUE);
paintFour.setTextSize(32);//设置绘制文本时,文本的文字大小
paintFour.setShader(shader);
canvas.drawText("jimTrency",500,500,paintFour);
}
}