文章标题

Android学习日志:自定义控件1

自定义控件分为两种,分别继承自View,ViewGroup。

通常情况下,有以下三种方法来实现自定义的空间。
· 对现有控件进行拓展
· 通过组合来实现新的控件(ViewGroup)
· 重写View来实现全新的控件(View)

1、自定义View
自定义View时,通常要重写onDraw()方法来绘制View的显示内容。如果使用wrap_content属性,还必须重写onMeasure()方法来测量自身。

在View中通常有一下一些比较重要的回调方法。
· onFinishInflate():从XML加载组件后回调。
· onSizeChanged():组件大小改变时回调。
· onMeasure():回调该方法来进行测量。
· onLayout():回调该方法来确定显示的位置。
· onTouchEvent():监听到触摸事件时回调。

通过自定义attrs属性,还可以设置新的属性配置值。例如:
在values目录下建attrs.xml文件

<resources>
    <declare-styleable name="cutsomView_name">
        <attr name="attr_name"  format="attr_value_type"/>
    </declare-styleable>
</resources>

在布局文件中引用时,需要指定引用的第三方控件的名字空间,如:
xmlns:custom=”http://schemas.android.com/apk/res-auto”
然后就可以在布局文件中引入该自定义View了。如:

<package_name.cutsomView_name
    cutsom:attr_name = "attr_value"/>

然后我们需要新建一个继承自View的class,在构造方法中通过TypedArray这样的数据结构来获取自定义属性集。

TypedArray ta = context.obtainStyledAttributes(attrs,R.styleable.cutsomView_name);

然后通过TypedArray的方法根据属性的id:R.styleable.attrs_id获取属性值。
重写onMeasure()和onDraw()方法。

2、自定义ViewGroup
自定义ViewGroup具体步骤跟自定义View差不多啦,主要就是在类中需要重写的方法不太一样。
在自定义ViewGroup时,通常会去重写onLayout()方法来控制其子View显示位置的逻辑,如果需要支持wrap_content属性,那么它还必须重写onMeasure()方法,这点和View是相同的。
ViewGroup通常情况下不需要绘制,因为它本身就没有需要绘制的东西,如果不是指定了ViewGroup的背景颜色,那么ViewGroup的onDraw()方法都不会被调用。但是,ViewGroup会使用dispatchDraw()方法来绘制其子View。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值