您的位置:首页 > 移动开发 > Android开发

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指定位置控制孩子的摆放位置
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: