关于自定义view, 本人的总结以及看法
来源:互联网 发布:redis存储数据大小 编辑:程序博客网 时间:2024/05/01 18:36
android世界中。 万物皆为view。 不管是控件还是布局 都是继承与view实现的,
有人可能会提问。 viewgrop呢? 这个先不谈, viewgrop继承了view , 但viewgrop里面也会有view或viewgrop 所以说是一层层循环嵌套下去。
自定义view 继承view 实现三个构造函数,然后2个参数的构造函数掉三个参数的构造函数,1个构造函数的参数调2个参数的构造函数,
不要问我为什么。源码就是这样写的
第二步:在value文件下面创建个attrs文件,然后创建了三个属性。文本文字,颜色和大小
//然后第三步 创建MyView类继承view 并在三个参数的构造函数中依次调用出属性
并将这些属性赋给mTitleText,mTitleColor,mTitleSize,
typedArray. 看名字也知道是属性集合 通过调用getIndexCount();获得属性的下标,然后循环依次赋值, 最后记得调用recycle()方法来释放资源
//文本String mTitleText;//文本颜色private int mTitleColor;//文本大小private int mTitleSize;//控制文本的范围private Rect mBound;private Paint mpaint;public Context context;
TypedArray typedArray = context.getTheme(). obtainStyledAttributes(attrs, R.styleable.MyView, defStyleAttr, 0);int n = typedArray.getIndexCount();for (int i = 0; i < n; i++) { int attr = typedArray.getIndex(i); switch (attr) { case R.styleable.MyView_titleText: mTitleText = typedArray.getString(attr); break; case R.styleable.MyView_titleColor: mTitleColor = typedArray.getColor(attr, Color.BLUE); break; case R.styleable.MyView_titleSize: mTitleSize = typedArray.getDimensionPixelSize(attr, (int) (TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 16, getResources().getDisplayMetrics()))); break; }}typedArray.recycle();
然后我们调用ondraw()方法来绘画界面
基本都看得懂吧? setColor.设置画笔的颜色
darwRect 设置画布的范围 关于里面的2个参数, 我等会再说
然后把text值加上去。好了。 别完了在xml中添加xmln命名空间
这样就可以使用自己定义的属性了
运行下程序,结果就是在左上角。 字体为红色。 背景为黄色, 图我就不贴了。
、 上面不是说道getMeasuredHeight()方法了吗? 刚好借这个机会来扯扯view的绘画流程
构造函数我就不说了, 首先。 先自行的是onMeasure()方法。 然后在执行
onMeasure , 然后执行layout方法。 MesaureHeight()这个是在onMeasureHeight方法中 通过setMeasuredDimension(width,height)这个方法传过去的, 具体可看源码然后在执行onlayout()方法。 onlayout是设定view显示的位置,一般都是默认情况getwidth()是获得view的宽, 那么width和mesurewidth()有什么区别或关联呢。我们可以通过locat看下, 如果在onmesurewidth()方法中调用getwidth()方法来获取控件的宽度是多大会发现logcat打印出来是为0.而getmesurewidth!=0,为什么呢。 因为getwidth是在onlayout中设定位置的实际大小。onlayout在onmesure()方法后调用。 当onlayout()调用后 在不重写onlayout的前提下getwidth和getmesurewidth();是完全一样的。当然。 如果想改变view的位置。 可以重写onlayout方法。 传进去你想设定的坐标。 不过此时这两个值就不相等了。getwidth才是实际值如有哪里不懂。 可联系我Q 296562555 私人总结。 不喜勿喷
0 0
- 关于自定义view, 本人的总结以及看法
- 本人的看法
- 关于自定义View的一些总结
- 本人对Java的看法:
- 本人对经济的看法
- 关于自定义组合控件以及自定义view
- 关于自定义View的基础思路以及画布的解析
- 自定义View的总结
- 关于Socket与Http协议的一些总结以及部分个人看法
- 关于iTween的一些总结和看法
- 黑马程序员_关于本人对面向对象的一点小看法
- 关于蓝桥杯的个人看法(本人java B 国二)
- 关于table view的content mode的个人看法
- 关于自定义view 以及view中的动画实现
- 关于自定义view的思考
- 关于view的自定义viewpager
- 失败的自定义View总结
- 自定义View系列的总结
- 某个片段==暖暖。
- GUI图形界面
- 动态规划全解析
- CodeForces-711D Directed Roads(拓扑排序+组合数)
- CSU 1809 Parenthesis 【前缀和+RMQ】
- 关于自定义view, 本人的总结以及看法
- 自定义Qt部件——盒状模型
- 开发时遇到的好玩的终端命令
- 【Spring学习笔记】AOP
- spark运行模式
- 【Android】51、动态添加碎片
- [LeetCode]Maximal Rectangle寻找最大矩形
- 关于struts2 2.5.2 的入门 遇到的问题 --总结1
- 继承、多态、封装、抽象类与接口