android 手把手教你一步步学会自定义控件之基础篇---Canvas

时间:2022-10-07 18:05:40

在平时的开发中多多少少会使用到自定义控件这块,学好自定义控件必须明白的一些基础的知识,比如View的onMeasure(),onLayout(),onDraw()这些方法是什么意思,如何正确的使用,还有一个重要的类就是Canvas,我们平时有的需求需要在屏幕上画一个圆啊,矩形等等都是如何实现的,其实自己也不是很懂,但愿意花时间学习,和大家一起努力,成长。在职业的道路上越走越好!我们没有那些在百度,腾讯,阿里那些人的天赋以及毕业名校,但是现实就是生活的点点滴滴,必须去面对,我们就只有更加努力,花费更多的时间去看大牛的博客,看他们怎么学习,知识的积累,这些都是值得我们好好学习,让自己起码能够成长,赚到更多的钱,养家活口,大话不说了直接切入主题!


平时没事可以多看看一些文档,API文档,这样有时候遇到问题也许会想起来了,如果我们想要在屏幕上画圆,根据java语言强大的设计思想,就是一切都是对象,哪就按照老祖宗的思想去想问题,既然要画圆,在android中都是通过花布画出去的,那么就必须有画布这个对象,在android中就是Canvas,如果我想画不同颜色的圆,哪我们就是一个画笔Paint对象,

1:绘制圆

我们都是读过初中的高材生,画一个圆就要求2点,一个时圆点的坐标,一个时圆的半径.而在android中坐标系谁这样的如图:

android 手把手教你一步步学会自定义控件之基础篇---Canvas

示例代码:

public class CustomView extends View {
private Paint mPaint;
public CustomView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}

public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
}

public CustomView(Context context) {
super(context);
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
mPaint = new Paint();
canvas.drawCircle(50, 50, 50, mPaint);
}
}

效果图:

android 手把手教你一步步学会自定义控件之基础篇---Canvas

圆是画出来了但是这颜色看的让人恐惧啊,咋办,万能的Paint对象该派上场了,

mPaint.setColor(Color.RED);一行代码就让圆变成红色

在这里讲下Paint对象一些常用的方法,

引用资料:http://blog.csdn.net/jiangwei0910410003/article/details/42640665

void  setARGB(int a, int r, int g, int b)  设置Paint对象颜色,参数一为alpha透明通道

void  setAlpha(int a)  设置alpha不透明度,范围为0~255

void  setAntiAlias(boolean aa)  //是否抗锯齿,默认值是false

void  setColor(int color)  //设置颜色,这里Android内部定义的有Color类包含了一些常见颜色定义

void  setFakeBoldText(boolean fakeBoldText)  //设置伪粗体文本

void  setLinearText(boolean linearText)  //设置线性文本

PathEffect  setPathEffect(PathEffect effect)  //设置路径效果

Rasterizer  setRasterizer(Rasterizer rasterizer) //设置光栅化

Shader  setShader(Shader shader)  //设置阴影 ,我们在后面会详细说一下Shader对象的

void  setTextAlign(Paint.Align align)  //设置文本对齐

void  setTextScaleX(float scaleX)  //设置文本缩放倍数,1.0f为原始

void  setTextSize(float textSize)  //设置字体大小

Typeface  setTypeface(Typeface typeface)  //设置字体,Typeface包含了字体的类型,粗细,还有倾斜、颜色等

注:

Paint mp = new paint();
mp.setTypeface(Typeface.DEFAULT_BOLD)
常用的字体类型名称还有:
Typeface.DEFAULT //常规字体类型
Typeface.DEFAULT_BOLD //黑体字体类型
Typeface.MONOSPACE //等宽字体类型
Typeface.SANS_SERIF //sans serif字体类型
Typeface.SERIF //serif字体类型
除了字体类型设置之外,还可以为字体类型设置字体风格,如设置粗体:
Paint mp = new Paint();
Typeface font = Typeface.create(Typeface.SANS_SERIF, Typeface.BOLD);
p.setTypeface( font );
常用的字体风格名称还有:
Typeface.BOLD //粗体
Typeface.BOLD_ITALIC //粗斜体
Typeface.ITALIC //斜体
Typeface.NORMAL //常规

void  setUnderlineText(boolean underlineText)  //设置下划线

void  setStyle(Style style) //设置画笔样式

注:

常用的样式

Paint.Style.FILL
Paint.Style.STROKE
Paint.Style.FILL_AND_STROKE

这里的FILL和STROKE两种方式用的最多,他们的区别也很好理解的,FILL就是填充的意思,STROKE就是空心的意思,只有图形的轮廓形状,内部是空的。

void setStrokeWidth(float width) //在画笔的样式为STROKE的时候,图形的轮廓宽度

2:绘制直线

画一个直线很简单,只要知道起点坐标,和终点坐标