自定义View之小细节
来源:互联网 发布:sql建立数据库用户 编辑:程序博客网 时间:2024/05/01 08:56
1.构造方法
- 自定义属性
ImageButtonWithText名字与自定义View名字一致,attr的名字要与其他自定义View的attr名字不同,不然会报错
<declare-styleable name="ImageButtonWithText"> <attr name="text_img" format="string"/> ...</declare-styleable>
- 构造方法里获取自定义属性
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ImageButtonWithText, 0, defStyle); if (a != null) { int n = a.getIndexCount(); for (int i = 0; i < n; i++) { int attr = a.getIndex(i); switch (attr) { case R.styleable.ImageButtonWithText_text_img: text = a.getText(attr); break; ... } } } a.recycle();
- 构造方法里获取android内部属性
比如想要获取com.android.internal.R.styleable.xxx
这种属性,不能用类似于上面的方法,但可以用getXX()的方法访问到。
2.onMeasure()
- 用途
回调方法,比如measure里会调用它,我们一般重写它重新分配控件大小。 - 测量控件大小
这里主要会用到MeasureSpec类,这个方法里不能使用getWidth()这类方法,还有需要注意的就是最好不要写这种代码if(widthMode != MeasureSpec.EXACTLY)
,因为还有其他值是不在我们熟知的三种模式里任何一种。
int widthMode = MeasureSpec.getMode(widthMeasureSpec);int widthSize = MeasureSpec.getSize(widthMeasureSpec);if (widthMode == MeasureSpec.EXACTLY) { mWidth = widthSize; } else {} setMeasuredDimension(mWidth, mHeight);//不能丢
3.onLayout()
- 用途
回调方法,比如layout()里会调用它,一般当自定义的View为ViewGroup需要为子View分配位置时重写它。这里浅说了下layout机制
4.获取控件大小的几个方法
- getWidth(),getHeight(),getLeft(),getTop()……
这一类的方法我目前理解是在onMeasure()测量之后才能获取到值,这也就是为什么在onMeasure里最好别用它的原因,它返回的值是以像素为单位,是相对于父控件的位置,如果父控件也是根控件,我就一般用’可用’屏幕来说,不能跟整个屏幕搞混。
这里提下View的mLeft这些属性,他是protected,但是我们继承了View也不能使用是因为不在同一包里,不过android给我们提供了上面这些方法来访问。 - 注意这些方法与MeasureSpec.getSize()的区别
- getX()和getY()
相当于getX(0),是获取手指触摸的x坐标,具体说是第一个手指触摸的x坐标,相对于你触摸的控件本身而言的。里面的数字代表第几个手指。 - getRawX()和getRawY();
也是获取手指触摸的x坐标,但是相对于屏幕的位置,这里是相对整个屏幕的。
5.关于文字
- 获取字体大小
FloatMath.ceil(Layout.getDesiredWidth("你的文字", "写这些文字需要用到的Paint对象"); //获取宽"Paint对象".getFontMetrics().bottom - mTextPaint.getFontMetrics().top; //获取高//FontMetrics是Paint的内部类,看他名字也大概猜到他干嘛的
- 字体绘制
canvas.drawText(“…”,x,y,mTextPaint)是从左下角开始绘制,我试验了下,感觉在左下角偏上一点点,所以x,y设置时要注意一下。
1 0
- 自定义View之小细节
- Android 自定义view 小细节处理
- 自定义View 细节点记录
- Android小白进阶(三)--自定义控件之自定义View
- 自定义View中我们比较容易忽视的一些小细节
- 自定义View小练习
- 小白自定义View
- 自定义View小示例(自定义View三)
- 自定义View 之 图标&文本 标题信息小控件
- Android 自定义View属性相关细节总结
- Android 自定义View属性相关细节
- 转载Android 自定义View属性相关细节
- Android 自定义View属性相关细节
- Android 自定义View属性相关细节
- 自定义view之继承view
- 自定义View之 继承View
- 自定义View简单小例子
- 自定义View的小陷阱
- Web自动化框架LazyUI使用手册(5)--模板工程:LazyUI-template详解
- GET POST方法长度限制
- 利用JDBC连接MySQL数据库
- C++ 编程题练习-整数的输出格式(7-3)
- 微信支付
- 自定义View之小细节
- AE的QuickTime问题
- 自定义Toast
- 安卓学习路线参考
- 快速入门openstack
- oracle修改字符集(WE8MSWIN1252 -->ZHS16GBK)
- 《HTML5与CCS3网页设计基础》案例2---JavaJam Coffee House
- 把OpenCV移植到ZedBoard上的那些事
- ConcurrentHashMap