文档章节

自定义view常用方法

jacky_123
 jacky_123
发布于 2015/02/25 20:05
字数 565
阅读 74
收藏 0

自定义 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发生变化时触发 
  以上是View实现的一些基本接口的回调方法,一般我们需要处理画布的显示时,重写onDraw(Canvas)用的的是最多的: 
view plaincopy to clipboardprint? 
  @Override  
  protected void onDraw(Canvas canvas) {  
    //这里我们直接使用canvas对象处理当前的画布,比如说使用Paint来选择要填充的颜色  
  Paint paintBackground = new Paint();  
  paintBackground.setColor(getResources().getColor(R.color.xxx));  //从Res中找到名为xxx的color颜色定义  
  canvas.drawRect(0, 0, getWidth(), getHeight(), paintBackground); //设置当前画布的背景颜色为paintBackground中定义的颜色,以0,0作为为起点,以当前画布的宽度和高度为重点即整块画布来填充,具体的请查看Android123未来讲到的Canvas和Paint,在Canvas中我们可以实现画路径,图形,区域,线。而Paint作为绘画方式的对象可以设置颜色,大小,甚至字体的类型等等。  
 
当然还有就是处理窗口还原状态问题(一般用于横竖屏切换),除了在Activity中可以调用外,开发游戏时我们尽量在View中使用类似 
view plaincopy to clipboardprint? 
@Override  
  protected Parcelable onSaveInstanceState() {  
      Parcelable p = super.onSaveInstanceState();  
      Bundle bundle = new Bundle();  
      bundle.putInt("x", pX);  
      bundle.putInt("y", pY);  
      bundle.putParcelable("android123_state", p);  
      return bundle;  
  }  
  @Override  
  protected void onRestoreInstanceState(Parcelable state) {   
      Bundle bundle = (Bundle) state;  
      dosomething(bundle.getInt("x"), bundle.getInt("y")); //获取刚才存储的x和y信息  
      super.onRestoreInstanceState(bundle.getParcelable("android123_state"));  
      return;  
  }

本文转载自:http://xiaonao880516.iteye.com/blog/1343194

共有 人打赏支持
jacky_123
粉丝 3
博文 55
码字总数 26297
作品 0
南通
程序员
私信 提问
Android项目刮刮奖详解(一)

前言 最近正在学鸿洋大大的刮刮奖,感觉学有所得,便是来写篇详解(尽管网上有很多了,不过毕竟是自己写的,自己以后方便复习),正文开始 目标 实现画板功能 思路 我们需要自定义View来实现...

Stars-one
2018/08/19
0
0
UIViewController视图控制器

1.视图控制器功能概述 分担AppDelegate的工作 实现模块独立,提高复用性 控制视图大小变换、布局视图、响应事件 检测视图的切换 检测以及处理屏幕旋转. 2.UIViewController创建及初始化工作 ...

tuwangsheng
2014/04/27
0
0
Android-自定义View

Android 之自定义 View 的死亡三部曲之 Measure 我还不知道你的三围呢(你要占多少屏幕),我怎么能轻易让你出场呢? Android 自定义 View,ViewGroup(一)的一些原理与细节, 定义 Recycler...

掘金官方
2018/01/03
0
0
android自定义view之自定义属性

这两天在Android中用到了自定义view,在自定义view时也顺便使用了下自定义属性。自定义属性以前只是耳闻 未曾谋面,这次借机会对自定义属性进行了一番学习,顺便总结了一下自定义属性的使用。...

紫葡萄0
2017/03/08
0
0
Android学习笔记09:Paint及Canvas的简单应用

Android学习笔记09:Paint及Canvas的简单应用   在Android中需要通过graphics类来显示2D图形。   graphics中包括了Canvas(画布)、Paint(画笔)、Color(颜色)、Bitmap(图像)等常用...

Carl_
2015/01/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

cnetos7+docker+rancher构建基于DevOps的全自动CI【01】

来自DevOps实践分享,分享从开发代码到生产环境部署的一条龙操作的实践及经验, 包含工具技术的选型及考量、私有代码库与私有镜像库的应用等。 1、环境选择 安装Rancher环境,一定要在干净的...

Elson
3分钟前
0
0
21分钟教会你分析MaxCompute账单

背景 阿里云大计算服务MaxCompute是一款商业化的大数据分析平台,其计算资源有预付费和后付费两种计费方式。并且产品每天按照project为维度进行计量计费(账单基本情况下会第二天6点前产出)...

zhaowei121
6分钟前
0
0
CTO职场解惑指南系列(一)

基于科技能够改变世界的事实,几乎每个公司的程序员都自带闪光灯。程序员的手和普通人的手自然是有区别的,“我们可是用双手改变了世界” 。(码农真的是靠双手吃饭,呵呵) 这个世界上但凡靠...

阿里云云栖社区
11分钟前
0
0
css实现图片自适应容器宽高

css实现图片自适应容器宽高的做法一般如下所示 <style>div{width: 200px; height: 200px}div img{width: 100%; height: 100%}</style><div><img src="xxxx.png" /></div> 当外层容......

小草先森
11分钟前
0
0
PlatON在CentOS上编译部署

本文作者为万向区块链CTO罗荣阁。 目录 PlatON在CentOS上编译部署 1. CentOS 环境准备 1.1. 使用rpm 安装devtoolset-7 1.2. 使用rpm 安装dos2unix 1.3. 准备PlatON代码 1.4. 确保build脚本正...

万向区块链
19分钟前
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部