自定义View步骤复习以及自定义属性(重点)

一.自定义View步骤复习

①首先要让类继承View
②实现View的两个构造方法(代码创建和XML创建)
③使用onSizeChanged将属性赋值
④在知道属性的值之后,使用onDraw方法进行绘制

二.写动画的步骤

1.分析动画
2.得出每个部分的逻辑位置大小关系
3.实现每一部分
4.查找“动画因子”
5.外部的下载任务来驱动进度的动画(使用属性动画ValueAnimator)

三.自定义属性

①在value中新建一个resource文件,命名为attrs
②在attrs中写入,注意declare-styleable关键字。后面的name是类名,也就是给哪个类添加自定义属性。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!--styable是自定义属性的标志-->
    <declare-styleable name="PercentLoading">
        <!--reference表示可以使用外部的,即可以访问外部资源-->
        <!--attr就是一个属性-->
        <attr name="bgColor" format="color|reference"/>
        <attr name="fgColor" format="color|reference"/>
        <!--这是系统已经定义的属性,所以省略format-->
        <attr name="android:textColor"/>
    </declare-styleable>
</resources>

③在Layout中进行“赋值”

android:textColor="@color/colorPrimary"
app:bgColor="@color/colorAccent"
app:fgColor="@color/colorPrimary"

④在自定义View中得到

constructor(context: Context,attrs: AttributeSet): super(context,attrs){
    //先把自定义属性解析出来,第二个参数里面的属性才是我关心的属性,我们需要把这些属性解析到attrs中
    //解析出自定义的所有属性,解析到typedArray中
    val typedArray: TypedArray = context.obtainStyledAttributes(attrs,R.styleable.PercentLoading)

    //关心什么,就要什么
    //然后得到颜色,进行赋值
    //解析一个属性
    bgColor = typedArray.getColor(R.styleable.PercentLoading_bgColor,Color.BLACK)
    fgColor = typedArray.getColor(R.styleable.PercentLoading_fgColor,Color.BLACK)
    textColor = typedArray.getColor(R.styleable.PercentLoading_android_textColor,Color.BLACK)

    //使用完毕需要释放内存
    typedArray.recycle()
}

注意:①当视图看不见的时候,比如在onCreate方法里面,是不会绘制控件的,也就是不会执行onDraw方法
②自定义text的结构
在这里插入图片描述

四.自定义ViewGroup

1.什么时候用ViewGroup

1.需要将多个子空间组合起来,形成一个完整体时
2.系统已有的布局方式满足不了需求时

2.如何定义ViewGroup

①如果想在已有的容器上添加自己的功能(最简单,功能最少)
MyViewGroup: ConstraintLayout
②如果自己想定义规则(复杂,功能最多)
MyViewGroup:ViewGroup

3.容器如何确定自己的尺寸

父容器->告诉一下最大的范围(限制)measureSpec->所有子控件测量一下自己->确定了父容器的尺寸

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值