自定义View的常用方法
来源:互联网 发布:mac war3 不能局域网 编辑:程序博客网 时间:2024/05/22 09:20
自定义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提示该方法和
onWindowVisibilityChange
- public
class cwjView extendsView { -
-
cwjView(Context context) { -
-
-
-
setFocusable( //允许获得焦点 -
setFocusableInTouchMode( //获取焦点时允许触控 -
-
} -
-
-
Parcelable //处理窗口保存事件onSaveInstanceState() { -
Parcelable pSaved = -
-
Bundle bundle = Bundle(); -
-
-
bundle; -
} -
-
void onRestoreInstanceState(Parcelable //处理窗口还原事件state) { -
-
Bundle bundle = (Bundle) state; -
-
-
-
-
} -
-
void onSizeChanged( intw, inth, intoldw, intoldh) //处理窗口大小变化事件 -
{ -
h, oldw, oldh); -
} -
-
-
void onMeasure int( widthMeasureSpec, intheightMeasureSpec) -
{ -
heightMeasureSpec); //如果不让父类处理记住调用setMeasuredDimension -
} -
-
-
void onLayout boolean( changed, intleft, inttop, intright, intbottom) -
{ -
(changed,left,top, ight,bottom) ; -
} -
-
-
void onDraw(Canvas canvas) { -
-
Paint bg = Paint(); -
bg.setColor(Color.Red); -
canvas.drawRect( 0, getWidth()/ 2,getHeight()/ 2,bg); //将view的左上角四分之一填充为红色 -
-
} -
-
-
boolean onTouchEvent(MotionEvent event) { -
-
super.onTouchEvent(event); //让父类处理屏幕触控事件 -
-
} -
-
-
boolean onKeyDown( intkeyCode, //处理按键事件,响应的轨迹球事件为KeyEvent event) { public boolean onTrackballEvent (MotionEvent event) -
-
(keyCode) { -
KeyEvent.KEYCODE_DPAD_UP: -
-
-
KeyEvent.KEYCODE_DPAD_DOWN: -
-
-
KeyEvent.KEYCODE_DPAD_LEFT: -
-
-
KeyEvent.KEYCODE_DPAD_RIGHT: -
-
-
-
KeyEvent.KEYCODE_DPAD_CENTER: //处理中键按下 -
-
-
-
super.onKeyDown(keyCode, event); -
} -
true; -
} -
- }
上面我们可以看到onMeasure使用的是父类的处理方法,如果我们需要解决自定义View的大小,可以尝试下面的方法
- protected
void onMeasure int( widthMeasureSpec, intheightMeasureSpec) - {
-
height = View.MeasureSpec.getSize(heightMeasureSpec); -
width = View.MeasureSpec.getSize(widthMeasureSpec); -
setMeasuredDimension(width,height); -
-
-
- }
以上是View实现的一些基本接口的回调方法,一般我们需要处理画布的显示时,重写onDraw(Canvas)用的的是最多的:
-
-
void onDraw(Canvas canvas) { -
-
-
Paint paintBackground = Paint(); -
paintBackground.setColor(getResources().getColor(R.color.xxx)); -
canvas.drawRect( 0, getWidth(), //设置当前画布的背景颜色为paintBackground中定义的颜色,以0,0作为为起点,以当前画布的宽度和高度为重点即整块画布来填充,具体的请查看Android123未来讲到的Canvas和Paint,在Canvas中我们可以实现画路径,图形,区域,线。而Paint作为绘画方式的对象可以设置颜色,大小,甚至字体的类型等等。getHeight(), paintBackground); - }
当然还有就是处理窗口还原状态问题(一般用于横竖屏切换),除了在Activity中可以调用外,开发游戏时我们尽量在View中使用类似
- 自定义View的常用方法
- 自定义View的常用方法
- 自定义 View的常用方法
- 自定义 View的常用方法:
- 四种常用的标准自定义View方法(上)
- 常用的四种标准自定义View方法
- 四种常用的标准自定义View方法(下)
- 自定义View(三)的常用方法(测量、绘制、位置)
- 安卓自定义View基础04-自定义view的分类以及常用方法讲解
- android中自定义view常用方法
- Android游戏开发之旅View类详解自定义View的常用方法
- Android游戏开发之旅View类详解自定义View的常用方法:onFinishInflate
- 自定义View属性的方法
- 自定义View的构造方法
- Android自定义View的方法
- Android自定义View的方法
- 自定义view的构造方法
- 自定义view常用到的流程梳理
- 用javascript和ASP的传值
- boost regex 超详细教程
- gridview添加一列自动增长排序字段
- [学习小结]数组名与数组首元素地址解析
- 第三课学习
- 自定义View的常用方法
- Gridview过长字段截取显示
- 思维加实践
- 游标的语法
- Java连接数据库
- fedora9中minicom的使用
- c51重入分析一
- 7.Boot Manager
- poj 3258(二分。。。)