Android自定义控件开发流程
2015-09-19 02:03
232 查看
自定义控件
自定义控件:
1.源生控件(ImageView,button,textView) 2.自己绘制的控件(绘制,行为操作)
View和ViewGroup的关系:
1. view: 提供实际的功能,提供了绘制的样式 2. viewGroup:管理子控件,位置,大小
View的绘制流程(相对性)
1. mearsue: 测量,final,控制控件的大小 2. layout: 布局,用来控制自己的布局位置 3. draw: 绘制,用来控制控件的显示样式 首先判断是不是ViewGroup,如果是设置自己的期望值 不是就设置孩子的期望值,设置孩子期望值之前需要
设置自己期望值之前需要
1. setMeasuredDimension(width,height): 用来设置自己的大小
2. ViewGroup.onMeasure(): 给出孩子的期望大小值,设置自己大小的准确值
View的行为:
1. dispatchTouchEvent():touch分发,android希望用来处理是否分发touch事件
2. onInterceptTouchEvent():touch拦截,android希望处理是否拦截touch事件
1. 是否拦截孩子touch
3. onTouchEvent(): touch处理, anroid希望开发人员封装触摸行为给用户提供交换
View的刷新: invalidate() 触发刷新主线程调用 —> draw() —> onDraw()
postIncalidata() 触发刷新子线程调用
Shape 图形 :
1.确定形状: shape:2.颜色:Solid 半径:corners
边框:stroke dashGap间隙,
关联源码:
1.去除依赖 2.Build to path 3.关联源码 4.fix project problem
设置图片的拉升: iv.setScaleType(ScaleType.FIT_XY);
无限轮播:
遍历点的个数,判断点的角标和position如果一致就设置选中的背景
设置getCount为最大值,防止越界position = position % datas.size();
设置当前页面max中间数页面(可以左右滑动)
int middle = Integer.MAX_VALUE / 2;
int extra = middle % imgReses.length;
int item = middle - extra;// 设置选中的页面
mPager.setCurrentItem(item);
使用系统控件组合成新的控件
YouKuMenu:
设置动画状态的标记,当满足什么条件下时,执行动画,更新动画的状态
设置动画数量的标记,设置动画的监听,当动画开始的时候,标记+ +结束的时候- -,
执行点击事件的时候判断动画的标记是否为零,不为0就不执行点击事件.
补间动画的处理: 显示的时候设置子控件可用,隐藏的时候设置子控件的不可用
YouKuMenu控件的的封装:
1.新建xml文件,引入写好的xml文件
2.将xml文件挂载到class上
3.在构造方法中设置逻辑,让另一个构造方法调用该构造
4.设置外载设备的响应setFocusableInTouchMode(true);
使用现有控件组合成新控件
下拉框效果:在editText的右边放置一个小箭头的图片,点击图片,在editText的下方弹出一个popupWindow,并对popupWindow进行一些设置即得到想要的效果。
继承已有View实现自定义View:
滑动开关按钮(手动绘制):主要步骤:
1、自定义类MyToggleButton继承自View
2、重写onMeasure方法,指定控件大小。
3、重写onDraw方法,绘制控件内容。
4、重写onTouchEvent方法,对touch事件进行解析。
创建一个类继承view,对外提供设置图片背景和滑块的背景
重写onmeasure方法设置控件的大小,绘制图片
手指按下的部分在滑动块的左侧.dra出滑动块的位置,在右侧画
为新控件添加自定义的属性
主要步骤:
1、在attrs.xml文件中声明属性,有属性名:name和格式:format 。如:2、在布局文件中使用新属性,使用之前必须先声明命名空间,如:xmlns:heima=”http://schemas.android.com/apk/res/com.itheima.mytogglebtn”
3、在自定义view的构造方法当中,通过解析 AttributeSet 对象,获得所需要的属性值。
继承已有ViewGroup实现自定义控件
模拟ViewPager的效果:实现步骤:
1、自定义view继承viewGroup。
2、重写onLayout方法,为每一个子View确定位置。
3、重写onTouchEvent方法,监听touch事件,并用scrollTo()或scrollBy()方法移动view,
4、监听UP事件,当手指抬起时,判断应显示的页面位置,并计算距离、滑动页面。
5、添加页面切换的监听事件。
Measure:
首先判断是不是ViewGroup是就测量他所有孩子的大小(遍历来测量)
(创建孩子的期望值)child.measure测量孩子宽高
setMeasuredDimension设置自己的宽高
widthMeasureSpec:父View给的期望值,两层意思前两位是模式和后三十是大小
onLayout()
当父view为子view计算位置后调用子view的onLayout(),告诉子view他的位置,一个view并不关心子的位置,但如果是一个ViewGroup的话.同时也会给子view指定位置控制孩子的摆放位置
相关文章推荐
- android中进程管理
- Android禁用回退事件
- Android中仿QQ聊天内容中提取电话号码,URL
- Android在ListView中获得对应行的button点击事件
- Android调用安卓相机拍照上传
- Android点击事件方法
- Android一个ListView列表之中插入两种不同的数据
- Android下拉刷新,上拉加载
- Android水平列表循环插入数据
- Android下拉列表使用方法
- Android ImageLoader组件加载图片
- Android完整弹窗界面
- Android单击界面上面的其他位置,取消焦点,让键盘消失
- android studio 常用插件
- Android取消文本框聚焦事件
- Android刷新页面
- Android下滑条ScrollView
- Android自定义控件按钮
- android 找工作
- Android跳转页面的基本方式