自定义组合控件,适配器原理-Day31

mobile2.1

  1. 主页定义
  2. 手机上锁功能

1.弹出设置密码框。

  1. 手机下载进度
  2. 自定定义控件

控件的属性其实就是控件类一个属性设置属性调用类的set方法方法

自定义组合控件的思路

  1. 生命一个View对象继承自相对布局,线性布局或者其他的ViewGroup
  2. View对象重写构造方法,然后初始化布局,通过View.inflate()方法把我们自己定义的布局挂到界面当中。
  3. 自定义属性在res/values目录下创建attrs.xml里面定义一些属性,
<resources
<declare-styleable name="cn.itcast.phonesafe.view.SettingView">
<attr name="setting_title" format="string" />
<attr name="des_on" format="string" />
<attr name="des_off" format="string" />
</declare-styleable>
</resources>
  1. 生命自定义属性的命名空间 xmlns:zl_pro="http://schemas.android.com/apk/res/cn.zlpro.mobilesafe"

  2. 可以在当前布局里面使用我们1条定义的控件了。

  3. 通过自定义函数的构造方法获取属性。AttributeSet

    attrs
    里面可以获取到
title = attrs.getAttributeValue(            "http://schemas.android.com/apk/res/cn.zlpro.mobilesafe","setting_title");

总结:自定义控件就是我们不用系统定义的控件,我们自己定义,控件就是一个类,我们可以把这里类使用到我们的布局文件当中。 现在有许多都是可以

LayoutInflater简单原理

LayoutInflater就是通过pull解析布局xml文件内部调用了createViewFromTag()该方法有节点和参数接着又去调用内部一个createView()方法,使用反射的方式创建View,这样通过递归的方式把DOM结构的布局全部反射创建成View对象

绘制原理

视图的绘制过程都必须经历三个最主要的阶段,即onMeasure()测量、onLayout()确定位置和onDraw()绘制,绘制到我们屏幕上面, 注意View是不会帮我绘制图形的,所以每个内容需要自行绘制 TextView ImageView都重写了onDraw()方法,绘制主要用到了Canvas这个类。

源代码final View view = createViewFromTag(name, attrs);这行代码来创建VView对象,最后添加到父节点当中。最后如此反复得递归就可以把所有的布局绘制到窗口上面了

参考博文:

LayoutInflater原理分析,一步步了解View(一)

Android视图绘制流程完全解析,带你一步步深入了解View(二)

Android视图状态及重绘流程分析,带你一步步深入了解View(三)

Android自定义View的实现方法,带你一步步深入了解View(四)

Android 自定义控件开发入门

问题专区

  1. 适配器监听原理

    ListView 针对List中每个item,要求 adapter “给我一个视图” (getView)。 所以在setAdapter()方法的时候就是给一个可以拿到装到当前容器的View生成器



  1. 控件怎么实现监听的。
  2. 自定义控件的原理,构造函数的作用完成

    其实即使在LayoutInflater加载成为布局的时候,通过反射响应的View,如果pull解析到该节点时就会调用改方法,绘制相应的View,源代码final View view = createViewFromTag(name, attrs);这行代码来创建VView对象,最后添加到父节点当中。最后如此反复得递归就可以把所有的布局绘制到窗口上面了。

  3. 怎么判断是子线程UI线程

  4. 学会google的最新设计语言

心得体会

  1. 后期精简代码,先把代码码完,接口逻辑装配
  2. 以后老师上课的代码不能拖到后期来处理。

创意

  1. 录视频添加自己科技评论

最新文章

  1. 折腾Ubuntu下的android studio
  2. 【BZOJ】3456: 城市规划
  3. PHP-----数组和常见排序算法
  4. Dom学习笔记-(一)
  5. PHP创建桌面快捷方式实例
  6. 转:Android中的Selector的用法
  7. MFC的GUI窗口使用Console输出函数printf
  8. ASP.NET MVC5 插件机制中插件的简单实现
  9. 让webstorm支持新建.vue文件
  10. tile38 一款开源的geo 数据库
  11. Zabbix监控数据库连通性所遇问题
  12. angularjs学习访问服务器(5)
  13. 用jQuery获取table中行id和td值
  14. ContestHunter暑假欢乐赛 SRM 01 - 儿童节常数赛 爆陵记
  15. 打败 IE 的葵花宝典:CSS Bug Table
  16. tableau join 与格式问题
  17. CoreAnimation 核心动画 / CABasicAnimation/ CAKeyframeAnimation
  18. NowCoder数列(矩阵快速幂变式)
  19. 【leetcode刷题笔记】Max Points on a Line
  20. 将linlayout布局转为bitmap图片和保存

热门文章

  1. Xcode5下去除Icon高光
  2. 【转】LINUX系统I/O复用技术之二:poll() -- 不错
  3. CSS实现Div透明,而显示在上面的文字不透明,但也可看到显示在下面的图片内容
  4. 深入学习JS: __doPostBack函数
  5. 页面与母版页面的asp:ContentPlaceHolder不匹配
  6. Android学习笔记(十一)BroadcastReceiver动态注册、注销示例
  7. jQuery技术内幕预览版.pdf1
  8. Poj 2528-Mayor&#39;s posters 线段切割
  9. 各种jee服务器的比较,tomcat, jboss, glassfish, websphere, weblogic
  10. Java Stream 使用详解