android基础学习之自定义view的简单原理

自定义view的原理:自定义view通常继承自view和groupview两个类

         一个view从创建到显示在屏幕上,之间的重要步骤如下

         1,调用构造函数

         2,测量大小

                   onMeasure()    当系统测量本view的大小时调用,在该方法中一定要用setMeasureDimension()方法来设置测量的尺寸,否则会报错。

                            其中setMeasureDimension()方法的含义是:设置view的测量尺寸的大小,即view希望得到的大小和view的真实大小不一定一样。

         3,确定位置

                   onLayout()   当系统为本view确定位置时调用(一般用不到这个,因为位置都是由父控件来确定)

         4,绘制view的内容

android中view的刷新机制:

         在Android的布局体系中,父View负责刷新、布局显示子View;而当子View需要刷新时,则是通知父View来完成。子View调用invalidate时,首先找到自己父View(View的成员变量mParent记录自己的父View),然后将AttachInfo中保存的信息告诉父View刷新自己。

         如果你不想建立完全自定义的控件,而想使用现有的组件重新组合,这时便可以使用组合组件。在Android里,有两个控件已经是组合控件了,Spinner和AutoCompleteTextView。

        

         我们可以这样建立一个组合控件:

                   1-通常开始的时候需要建立一种布局,所以建立一个继承自layout的子类。可能我们需要使用LinearLayout不觉并且使用水平布局。记住布局之间可以嵌套,所以组合控件可以被设计成任何复杂的布局。注意,组合控件的布局文件可以在xml配置,也可以完全用代码来写。

                   2-在新类的构造方法里,首先要将参数传递给父类。然后再进行其他的设置。你可以在这里添加文本输入框和弹出列表,注意,你可以使用xml配置文件里的一些属性和参数。

                   3-你可以建立事件监听器,例如监听列表项是否被选择,或者文本编辑框的内容是否改变。

                   4-你可以重写on方法,例如onKeyDown()里,设置某个键被按下时显示下拉菜单。

                   总之,使用组合控件要注意一下几条建议:

                            @布局可以从xml读取或者用代码建立。

                            @onDraw()和onMeasure()方法基本上都会正确的运行,一半不需要重写。

                            @最后,你可以快速的构建任意复杂的组合控件,然后像普通的控件那样来使用它。

还有种更见简单的创建自定义View的方法,就是改写已存在的视图类。如果已经有一个控件和你的需求十分接近,你只需要继承它并且重写你想改变的方法即可。在完全自定义的View类中你需要做所有的处理,但如果继承自一个已存在的view,那么很多事情不需要我们处理。

 

下面是一些关键的地方:

1-定义:

MyEditText类是这样定义的:public staticclass MyEditText extends EditText。

它被定义为一个内部类,但却是public的,所以可以被别的类访问。

他是静态的,所以不允许通过“合成方法”来访问父类的数据,正因为这样,它是一个独立的和NoteEditer类无关的类。这是一种建立内部类的非常好的方法,如果它不需要从外部类访问状态,并且保证了外部类的精简,而且会更容易的被访问。

他继承自EditText,当我们完成子类时,子类就可以像一个EditText类那样被正常的访问了。

2-类的初始化

首先调用父类方法,此外,他是一个带参数的构造方法而不是默认的。通过使用xml读取的参数来创建EdieText类,在构造方法里还需要将这些参数传递给父类。

3-重写某些方法

在这个例子中,只有onDraw()方法被重写。

在重写onDraw()方法里,我们在canvas上绘制蓝色的线,canvas是onDraw()传进来的参数。父类的onDraw()在方法结束前被调用。父类的方法应该被调用,但此时我们最后再调用父类地方法,这样可以包含我们绘制的蓝色的线。

4-使用自定义组件

自定义组件写好之后,怎样用呢,以NotePad为例,可以直接在xml中使用。


而继承自groupview的注意如下事项
1,在onlayout方法中,指定子view的位置
通过getChildAt()和getChildCount()和view.layout()等方法来确定。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值