自定义控件,自定义View

自定义View概念:Android中,组件必须是View的直接子类或间接的子类,其中View有一个ViewGroup的子类,用于定义容器(FrameLayout,LinearLayout都是ViewGroup的子类).如果组件中还有子组件,就一定是从ViewGroup类继承,否则从View类继承,
View类就相当于控件的上帝一样,只要你自定义控件,要么是View的直接子类,要么是View的间接子类.
View类定义组件相关的通用功能,只要是自定义控件就一定会和View产生联系,所以View是我们开发者必须要详细理解的类

自定义View的三种形式:
1.扩展式自定义View继承自Android原生特定的View:如TextView,ImageView等等,我们通过重写OnDraw等回调方法进行扩展,使其实现我们想要的功能或者形式.
注意:该方法实现的自定义View控件不需要自己支持wrap_content和padding.(因为继承的View已经实现了)
2.组合式自定义View继承自ViewGroup的子View(LinearLayout,RelativeLayout,FrameLayout等5个),当某种效果看起来像几种View组合在一起实现的时候,我们就可以用这种方法.
注意:该方法实现自定义View,不需要自己处理ViewGroup的测量和布局这两个过程.(因为已经估值好了)
3.完全自定义View继承自View(Android中所有控件的基类),通常实现一些不方便布局的组合方式来达到的,需要静态或动态的娴熟一些不规则的控件或图形
注意:该方法实现的自定义View需要自己支持wrap_content和Padding(完全从无到有,系统是无法确定,必须自己操作)

自定义一个View有五个步骤:
1.类要继承View控件的基类
2.重写构造方法
3.重写OnMeasure方法
4.重写OnDraw方法
5.使用自定义控件


public class MyView extends View{

    //在代码中添加我们自定义的View,所调用的构造方法
    public MyView(Context context) {
        super(context);
    }

    //XML文件中添加我们自定义的控件时,所调用的方法,多了一个参数
    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    //这个构造方法一般我们用不到,不是系统调用,需要我们现实调用并给defStyleAttr传值,多了一个参数
    //引用Style资源属性参数时,也就是我们可以在Style中自定义View定义一个默认的属性样式,然后添加进来
    public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    //测量View控件,决定控件在手机所占位置的大小
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }

    //绘制了控件,决定了控件呈现的样式,参数就是一个画布,可以直接使用
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值