自定义组合控件,适配器原理-Day31
自定义组合控件,适配器原理-Day31
mobile2.1
- 主页定义
- 手机上锁功能
1.弹出设置密码框。
- 手机下载进度
- 自定定义控件
控件的属性其实就是控件类一个属性设置属性调用类的set方法方法,
自定义组合控件的思路
- 生命一个
View
对象继承自相对布局,线性布局或者其他的ViewGroup
- 在
View
对象重写构造方法,然后初始化布局,通过View.inflate()
方法把我们自己定义的布局挂到界面当中。 - 自定义属性在
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>
生命自定义属性的命名空间
xmlns:zl_pro="http://schemas.android.com/apk/res/cn.zlpro.mobilesafe"
可以在当前布局里面使用我们
1条
定义的控件了。- 通过自定义函数的构造方法获取属性。
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 自定义控件开发入门
问题专区
- 适配器监听原理
ListView
针对List中每个item
,要求adapter
“给我一个视图” (getView)。 所以在setAdapter()
方法的时候就是给一个可以拿到装到当前容器的View生成器
- 控件怎么实现监听的。
自定义控件的原理,构造函数的作用
完成
其实即使在
LayoutInflater
加载成为布局的时候,通过反射响应的View
,如果pull
解析到该节点时就会调用改方法,绘制相应的View,源代码final View view = createViewFromTag(name, attrs);
这行代码来创建VView
对象,最后添加到父节点当中。最后如此反复得递归就可以把所有的布局绘制到窗口上面了。怎么判断是子线程UI线程
- 学会
google
的最新设计语言
心得体会
- 后期精简代码,先把代码码完,接口逻辑装配
- 以后老师上课的代码不能拖到后期来处理。
创意
- 录视频添加自己科技评论
最新文章
- 折腾Ubuntu下的android studio
- 【BZOJ】3456: 城市规划
- PHP-----数组和常见排序算法
- Dom学习笔记-(一)
- PHP创建桌面快捷方式实例
- 转:Android中的Selector的用法
- MFC的GUI窗口使用Console输出函数printf
- ASP.NET MVC5 插件机制中插件的简单实现
- 让webstorm支持新建.vue文件
- tile38 一款开源的geo 数据库
- Zabbix监控数据库连通性所遇问题
- angularjs学习访问服务器(5)
- 用jQuery获取table中行id和td值
- ContestHunter暑假欢乐赛 SRM 01 - 儿童节常数赛 爆陵记
- 打败 IE 的葵花宝典:CSS Bug Table
- tableau join 与格式问题
- CoreAnimation 核心动画 / CABasicAnimation/ CAKeyframeAnimation
- NowCoder数列(矩阵快速幂变式)
- 【leetcode刷题笔记】Max Points on a Line
- 将linlayout布局转为bitmap图片和保存
热门文章
- Xcode5下去除Icon高光
- 【转】LINUX系统I/O复用技术之二:poll() -- 不错
- CSS实现Div透明,而显示在上面的文字不透明,但也可看到显示在下面的图片内容
- 深入学习JS: __doPostBack函数
- 页面与母版页面的asp:ContentPlaceHolder不匹配
- Android学习笔记(十一)BroadcastReceiver动态注册、注销示例
- jQuery技术内幕预览版.pdf1
- Poj 2528-Mayor&#39;s posters 线段切割
- 各种jee服务器的比较,tomcat, jboss, glassfish, websphere, weblogic
- Java Stream 使用详解