4.4
一、android 界面开发
1、三个重要的类:View视图、Canvas画布、Paint画笔
2、android 界面开发常用三种视图
View --只能在主线程中更新,没有缓存机制,适合画面更新较少的界面,比如有按键按下才变化的界面。
SurfaceView --可以设置独立的线程,有缓存机制,主要用于2D游戏
GLSurfaceView --主要用于3D游戏,暂时不学习
二、View框架
同SWIMG、AWT一样,Android也提供大量的View组件给开发者,所有组件都是View的子类,包括以前介绍的常用控件和ViewGroup也是。ViewGroup是View的子类,所以它也具有View的特性,但它主要用来充当View的容器,将其中的View视作自己的孩子,对它的子View进行管理,当然它的孩子也可以是ViewGroup类型。ViewGroup(树根)和它的孩子们(View和ViewGroup)以树形结构形成了一个层次结构,View类有接受和处理消息的功能,android系统所产生的消息会在这些ViewGroup和 View之间传递。
1、View类结构
java.lang.Object
-------android.view.View
直接子类:AnalogClock, ImageView, KeyboardView, ProgressBar, SurfaceView, TextView, ViewGroup, ViewStub
当然还有许多其他间接子类。
2、ViewGroup
ViewGroup继承于View,它可以包含其他的View,就像一个View的容器,我们可以调用其成员函数addView()将View当作孩子放到ViewGroup中。
我们经常使用的LinearLayout、relativeLayout等都是ViewGroup的子类,ViewGroup类中有一个内部类ViewGroup.LayoutParams,我们经常使用LayoutParams的子类来构造布局参数。
我们也可以自定义自己的布局,以方便日后使用和维护,这时我们就需要继承ViewGroup类并在派生类中重写ViewGroup的一些方法。
3、自定义View
有些自带组件可能无法满足需求,这时候往往需要自定义View,一般只要主要底下两点就可以了。
(1) 继承View
(2) 重写感兴趣的方法
自定义View的常用方法:
onFinishInflate() 当View中所有的子控件 均被映射成xml后触发
onMeasure(int, int) 确定所有子元素的大小
onLayout(boolean, int, int, int, int) 当View分配所有的子元素的大小和位置时触发
onSizeChanged(int, int, int, int) 当view的大小发生变化时触发
onDraw(Canvas) view渲染内容的细节
onKeyDown(int, KeyEvent) 有按键按下后触发
onKeyUp(int, KeyEvent) 有按键按下后弹起时触发
onTrackballEvent(MotionEvent) 轨迹球事件
onTouchEvent(MotionEvent) 触屏事件
onFocusChanged(boolean, int, Rect) 当View获取 或失去焦点时触发
onWindowFocusChanged(boolean) 当窗口包含的view获取或失去焦点时触发
onAttachedToWindow() 当view被附着到一个窗口时触发
onDetachedFromWindow() 当view离开附着的窗口时触发,Android123提示该方法和 onAttachedToWindow() 是相反的。
onWindowVisibilityChanged(int) 当窗口中包含的可见的view发生变化时触发
4、View实例
在View上 写"GameView" ,按方向键 上下左右会随之移动,触摸屏幕、拖动也会移到相应位置。
新建MyView类 继承View基类