android自定义View
来源:互联网 发布:个人可以开淘宝网店吗 编辑:程序博客网 时间:2024/06/07 21:45
自定义View
自定义View的实现类型
- 继承自View完全自定义
- 继承现有控件实现特定的效果
- 继承自ViewGroup实现布局类
实现步骤:
- 自定义view的属性
首先在res/values下创建attrs.xml ,通过<attr name="xxx"
来创建你需要的属性,如:
,format="类型"
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="titleText" format="string"/>
<attr name="titleColor" format="color"/>
<attr name="titleSize" format="dimension"/>
<declare-styleable name="SimpleTextview">
<attr name="titleText"/>
<attr name="titleColor"/>
<attr name="titleSize"/>
</declare-styleable>
</resources>
这里定义了3个自定义属性还有分别的类型,同时定义了自定义view的名字为SimpleTextView,看代码就能明白了。
2.创建SimpleTextView类,在View的构造方法里面获取我们自定义的属性
View类有几个不同的构造方法,般情况下,我们会将这几个构造方法串联起来,即层层调用,让最终的业务处理都集中在几个参数的构造方法。比如我们让一参的构造方法引用两参的构造方法,两参的构造方法引用三参的构造方法。示例代码如下:
public SimpleTextview(Context context) {
this(context,null);
}
public SimpleTextview(Context context, @Nullable AttributeSet attrs) {
this(context,attrs,0);
}
public SimpleTextview(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
3.重写onMeasure()方法
onMeasure()方法中主要负责测量,决定控件本身或其子控件所占的宽高。我们可以通过onMeasure()方法提供的参数widthMeasureSpec和heightMeasureSpec来分别获取控件宽度和高度的测量模式和测量值(测量 = 测量模式 + 测量值)。
测试模式分为3种情况:
- EXACTLY:当宽高值设置为具体值时使用,如100DIP、match_parent等,此时取出的size是精确的尺寸;
- AT_MOST:当宽高值设置为wrap_content时使用,此时取出的size是控件最大可获得的空间;
- UNSPECIFIED:当没有指定宽高值时使用(很少见)。
4.重写onDraw()
重写onDraw()方法,我们就需要学习在onDraw()方法中使用最多的两个类:Paint和Canvas。
Paint就相当于是画笔,Canvas就相当于是画布,Canvas要用Paint来绘画,那么画笔就可以提供颜色,粗细等条件,具体方法可查询API在需要的时候使用不同的方法就好了。
这样一个简单的自定义View就完成了。
- Android View---自定义View
- Android View---自定义View
- Android 自定义View 之 自定义View属性
- 【自定义View系列】android自定义View概述
- Android自定义view自定义属性
- Android自定义控件 -- 自定义View
- android自定义view(自定义数字键盘)
- Android自定义View-自定义属性
- Android自定义View-自定义属性
- Android 自定义View
- Android 自定义 View
- android自定义View
- Android 中自定义 view
- android 自定义view组件
- Android 自定义 View
- android 自定义view
- Android:如何自定义View
- android 自定义View
- Spark基础-Scala函数式编程
- 右击解决新建里面的office相关显示问题
- let和const
- 菜鸟学习NodeJS笔记(一)
- yeoman 构建angular项目
- android自定义View
- ubuntu中删除显示为deinstall的linux内核
- CentOS 7 安装mysql
- 使用tkinter和pyinstaller开发一个GUI爬虫程序
- 二:数据结构
- C# WebClient 多文件上传实现
- bzoj2119 股市的预测(SA+lcp)
- boost库文档地址
- HDU