一.自定义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->所有子控件测量一下自己->确定了父容器的尺寸