资源描述:
《android自定义view的使用总结》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Android自定义View使用总结很多人把自定义View想象得很复杂,其实一步一步的去理解记忆,它的知识点并不是很难,但是它的应用方向确实是比较多。本文先简单的介绍一下自定义View和它的使用。一.View的基本概念(一)View的理解View是一个Android视图的基础类,这个类是用户接口的基础构件。View表示屏幕上的一块矩形区域,负责绘制这个区域和事件处理。View是所有widget类的基类,Widget类用于创建交互式UI构件(按钮,输入框等)。View类的ViewGroup子类是layout的基类,
2、Layout是一个不可见的容器,它保存着View(或ViewGroup)并定义这些View的layout属性。可以说View类是用户视图接口类中最重要的一个类,就像Object类是所有类的基础父类相似,不过View是针对的是视图。(二)IDs:Views有一个整数相对应,id被用于在View树中找到指定的Viewo可以在layout文件中定义一个唯一的ID,在Activity的onCreate函数中调用findViewByld来查找这个Viewo在整个树内,id可以不是唯一的,但再指定的范围内查找时我们可以确信它
3、是唯一的。比如不同的xml布局文件中可以存在相同id编号,但是同一个xml布局文件中不能存在相同的id编号。(三)获取View的位置信息View是一个矩形区域,使用左&上的坐标以及长和宽可以表示一个View。我们可以使用方法getLeft(),getTop(),getRight(),getBottomO,getWidth(),getHeighto等函数来获取其位置信息.二.View创建概述在API中对View的回调流程有以个详细的描述:(一)Creation:创建流程1.调用构造器publicView(Conte
4、xtcontext)//使用java代码创建View时的构造方法publicView(Contextcontext,AttributeSetattrs)//在XML中配置时的构造方法,attrs存储xml中设置的属性上面这两个构造方法都是要重写的,哪怕只是使用其中一个。并且初始化数据在这两个构造方法都要做一遍。2.onFinishlnflate()//当View和他的所有子View从XML中解析完成后调用。一般不怎么用!(二)Layout:布局流程1.onMeasure(intw,inth)//确定View和它所
5、有的子View要求的尺寸时调用2.onLayout(booleanchange,intleft,inttop,intright,intbutton)//当这个View为其所有的子View指派一个尺寸和位置时调用3.onSizeChanged(intw,inth,intoldw,intoldh)//当这个View的尺寸改变后调用(三)Drawing:绘制过程(自定义View的重点方法哦)1.onDraw(Canvas)//当View给定其内容时调用(四)Event:事件流程1.onKeyDown(int,KeyEv
6、ent)//当一个新的键按下时2.onKeyUp(int,KeyEvent)//当一个键弹起时3.onTrackballEvent(MotionEvent)//当滚迹球事件发生时4.onTouchEvent(MotionEvent)//当一个触摸屏事件发生时(五)Focus:焦点流程1.onFocusChanged(boolean,int,Rect)//当View得到和失去焦点时调用1.onWindowFocusChanged(boolean)//当Window包含的View得到或失去焦点时调用o三・定制View
7、为了实现一个定制View,需要重写一些View的标准方法。framework会调用这些方法,并且认为这些方法应该是所有的view都有实现。这些方法不必全部重写。事实上,可以只重写onDraw方法就可以了自定义View的步骤:(一)扩展View或者View的子类。例如:classMyViewextendsViewclassMyViewextendsTextViewclassMyViewextendsLinearLayoutclassMyViewextendsViewPager这些都是自定义View的扩展,比如继承了
8、TextView可以直接使用它的方法,setText("xxx”);setBackColor(OxfOO);等等。(一)必须实现其中一个构造方法,一般都是实现两个。(三)重写onDraw(canvas)方法进行绘制,整个涉及到绘制任意的图像,比如画线,画圆,画矩形等等。(四)女口需调整大小,重写onMesure,默认是全屏的。(五)如需样式在xml中布置,自定义属性。这相