最近项目当中遇到一个需求,需要有一个图片验证码。效果类似下图,比较常见
废话不多说,先给大家看看Demo效果
大家看到这,如果觉得效果还不错的话,请继续往下看。
一、自定义View的步骤
首先,还是老生常谈,讲一下自定义view的一个流程:
写一个类继承自你需要的现成控件或者view;
重写View的构造方法;
测量View的大小,重写onMeasure()方法;
重写onDraw()方法;
其中onMeasure方法不是必须的,只有在系统无法确定自定义View的大小时,才需要我们重写onMeasure方法来完成自定义View大小的测量,因为如果在自定义view的时候没有指定其精确宽度或高度,例如:布局文件中layout_width或者layout_height属性值为wrap_content而不是match_parent或者某个精确的值,那么系统就不知道我们自定义view在onDraw()中绘制的图形大小,所以通常我们要让我们的自定义view支持wrap_content的话,就必须重写onMeasure()来告诉系统我们要绘制的view的大小。
另外,如果 我们自定义view需要提供一些用户自己设置的属性,那么我们就需要自定义属性。例如:padding,字体大小,字体颜色等等。
二、自定义View的实现
我们先分析一下这个图片验证码要如何实现。通过上面的效果图,我们可以知道要实现这种效果,首先需要绘制验证码字符串,即图中的文本部分,其次是一些干扰线以及干扰线的绘制。分析完毕,接下来我们根据需求一点一点的实现这种效果。
1.继承View,重写构造方法