Android已经为我们提供了大量的View供我们使用,但是可能有时候这些组件不能满足我们的开发中的需求,这时候就需要自定义控件了。自定义控件对于初学者总是感觉是一种复杂的技术。因为里面涉及到的知识点会比较多。但是任何复的技术后面都是一点点简单知识的积累。通过对自定义控件的学习去可以更深入的掌握android的相关知识点,所以学习android自定义控件是很有必要的。记得以前学习总是想着去先理解很多知识点,然后再来学着自定义控件,但是每次写自定义控件的时候总是不知道从哪里下手啊。后来在学习的过程中发现自己跟着去写一些简单的自定义控件,然后在这个过程中遇到了没有掌握的知识点再去学习。不仅自定义控件的能力有所提高。其它的知识也有了很好的巩固和识。
接下谈谈自定义控件的基本结构
自定义控件需要自己新建一个类并继承 View类,同事,为该类定义了三个构造方法 ,并重写了另外两个构造方法。
构造方法一:public FirstView(Context context)
构造方法二:public FirstView(Context context, AttributeSet attrs)
构造方法三:public FirstView(Context context, AttributeSet attrs, int defStyleAttr)
我们来分别谈谈这三个构造方法的作用
这三个构造方法的调用场景其实并不一样,第一个只有一个参数,在代码中创建组件时会调用该构造方法,比如创建一个按钮:Button btnOK = new Button(this),this 是指当前的 Activity,Activity 是 Context 的子类。第二个方法在 layout 布局文件中使用时调用,参数 attrs 表示当前配置中的属性集合,例如在要 layout.xml 中定义一个按钮:,Android 会调用第二个构造方法 Inflate 出 Button 对象。而第三个构造方法是不会自动调用的,当我们在 Theme 中定义了 Style 属性时通常在第二个构造方法中手动调用
除此之恩爱 我们还要手动添加两个方法 一个是用来绘图的protected void onDraw(Canvas canvas)、 一个还用俩测量此存的protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)。第一个方法中用语系那是组件的外观,而最总的结果需要通过canvas绘制出来,值得注意的是,在view类中,这个方法并没有默认的实现。而测量的方法是一个手办胡的方法,这就意味着这个方法主要用语自雷的重写和扩展,如果不崇拜写改方法,他的父类view会有自己的默认实现,在 Android 中,自定义组件的大小都由自身通过onMeasure()进行测量,不管界面布局有多么复杂,每个组件都负责计算自己的大小。其实我们也可以自己定义一个init方法,用这方法来全局的画笔,可以蛇者好多属性。例如:
我们先把画笔new出来
paint = new Paint(); //设置抗锯齿 paint.setAntiAlias(false); //设置画笔颜色 paint.setColor(Color.RED); //设置画笔的宽度 paint.setStrokeWidth(1); 但是值得注意的是这个init方法需要在没个构造方法中豆被调用,因为需要被多次使用。 在这里设置的属性之后还可以通过覆盖的方式进行修改。我们可以听过canvas划痕多自己想yao9的东西,例如画圆,画矩形,画线条等等、 其他的我们就可像普通的控件一样使用了。