效果
分析
效果图来看,点击事件触发view
的展开收起,并在收起状态下保留
了第一个子view显示,这个展开收起其实就是view的高度
变化,所以只要控制好高度,就能很简单
的实现这个效果。
步骤
- 1.初始化参数 设置方向等
- 2.根据动画执行进度计算高度
初始化
class ExpandLinearLayout : LinearLayout {
//是否展开,默认展开
private var isOpen = true
//第一个子view的高度,即收起保留高度
private var firstChildHeight = 0
//所有子view高度,即总高度
private var allChildHeight = 0
/**
* 动画值改变的时候 请求重新布局
*/
private var animPercent: Float = 0f
constructor(context: Context) : super(context) {
initView()
}
constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet) {
initView()
}
constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super(
context,
attributeSet,
defStyleAttr
) {
initView()
}
private fun initView() {
//横向的话 稍加修改计算宽度即可
orientation = VERTICAL
animPercent = 1f
isOpen = true
}
}
复制代码
定义一个类ExpandLinearLayout
,继承自LinearLayout
,当然也可以是其他的view。
然后重写构造方法,并在构造方法里面调用initView
方法。
在initView</