自定义View。
来源:互联网 发布:游戏程序员养成计划 编辑:程序博客网 时间:2024/05/02 16:54
之前模模糊糊的谢过一些自定义View,一直希望能有更深的了解。
教材一
简单的显示–onDraw()
在这里我和教材并不是完全相同
关键差异
//(3参数)构造方法public JQ_TextView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); /**把我们的自定义属性放到TypedArray中*/ TypedArray typedArray = context.getTheme() .obtainStyledAttributes(attrs, R.styleable.JQ_TextView, defStyleAttr, 0); for (int i = 0; i < typedArray.length(); i++) { switch (i) { case R.styleable.JQ_TextView_textColor: this.textColor = typedArray.getColor(i, Color.BLUE); break; case R.styleable.JQ_TextView_textSize: this.textSize = typedArray.getDimension(i, 200); break; case R.styleable.JQ_TextView_backgroundColor: this.backgroundColor = typedArray.getColor(i, Color.WHITE); break; case R.styleable.JQ_TextView_text: this.text = typedArray.getString(i); this.text = this.text == null ? "" : this.text;//防止报空指针 break; } } typedArray.recycle(); }
我的看法:这个 for循环是为了给我们的自定义属性,赋予我们自定义的值,索引从min–max就是我们的 attr.xml 文件中所自定义的属性从上到下,也就是索引从 0 到 max(4)
attr.xml
这里有一点:就是这个XML文件名不必要是attr,只要你乐意随便是amao,agou。重要的在于内容,只要节点符合规格就没得问题。
<?xml version="1.0" encoding="utf-8"?><resources> <!--这里是JQ_TextView的自定义属性,我们要了解到,这个XML文件中的一些规则--> <declare-styleable name="JQ_TextView"> <attr name="textColor" format="color"/> <attr name="textSize" format="dimension"/> <attr name="backgroundColor" format="color"/> <attr name="text" format="string"/> </declare-styleable></resources>
按教材,并不能完美实现,我没有考虑为什么。
总之我的第一步就这么开始并且这么结束了。
接下来我们要显示变得可控。
控制显示位置onMeasure()
探索
首先把文字放到空间的中心
小插曲
我们需要了解的两个知识:1,View的坐标怎么样的;2,文字本身属性的获取;
* 关于Rect类
有人说···
我们要注意的是那四个参数代表左上角和右下角的两个坐标
- 关于第一个问题
通过 View.getX(),View.getY()两个方法可以判断
:子View的坐标是相对于父亲View而言的,不是相对于屏幕而言的。 - 关于获取文字属性(宽/高):参考
关于控件大小的显示
开始之前难免疑问?我们从别人的博客得到这些结论,他们的结论是怎么得出来的,现在我认为是从源码。但是我感觉源码太长,太多,也有太多知识没有储备,总是耐不住性子去看。
系统帮我们测量的高度和宽度都是MATCH_PARNET,当我们设置明确的宽度和高度时,系统帮我们测量的结果就是我们设置的结果,当我们设置为WRAP_CONTENT,或者MATCH_PARENT系统帮我们测量的结果就是MATCH_PARENT的长度。
所以,当设置了WRAP_CONTENT时,我们需要自己进行测量,即重写onMesure方法”:
重写之前先了解MeasureSpec的specMode,一共三种类型:EXACTLY:一般是设置了明确的值或者是MATCH_PARENT
AT_MOST:表示子布局限制在一个最大值内,一般为WARP_CONTENT
UNSPECIFIED:表示子布局想要多大就多大,很少使用(我是不知道什么时候出现的。)!!深度好文!!
关于MeasureSpaec的一些个人了解
当我们要知道使用WARP_CONTENT时所需要的控件宽高的时候就需要计算了,这时候我们就必须知道有什么附加的宽和高。例如如果继承View的话就需要知道Padding····
但是还有别的吗?我们查阅下文档。
- 自定义view
- 自定义View
- 自定义view
- 自定义View
- 自定义View
- 自定义view
- 自定义View
- 自定义view
- 自定义view
- 自定义View
- 自定义View
- 自定义view
- 自定义view
- 自定义view
- 自定义view
- 自定义view
- 自定义View
- 自定义View
- JVM GC算法 CMS 详解
- html中 left,right,top,bottom图示
- easybcd硬盘安装kali
- iOS实战-头像更新上传之后,UI不刷新
- 整数转换成罗马数字
- 自定义View。
- CSS 表格
- __setattr__,setattr(),getattr__,getattr()及__getattribute__的区别
- 推荐系统算法(5)<InfoQ系列翻译文章,2016>
- 客户端
- 关于IPMI的几个问题
- EditText(第1章)-简介以及游标相关属性
- ECMAScript6新特性简介
- 查看存储过程和函数