我在RecyclerView中有很多卡,并且正在为每个CardView进行展开/折叠动画。我的expand方法无法正确扩展。
要测量我的卡,我使用:
view.measure(View.MeasureSpec.makeMeasureSpec(view.width,View.MeasureSpec.AT_MOST),
View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED))
第一次扩展卡时,由于我使用的是View.MeasureSpec.UNSPECIFIED,所以卡的高度非常大(大约9700)。
第一次出现这种奇怪的行为。当我再次扩展卡时,由于第一次扩展,现在我的高度已经知道,并且卡具有正确的高度。
我需要在第一次扩展之前获得正确的卡高度
我看到了一些类似的帖子:
Android:在绘制视图之前先获取其高度
如何根据String的大小自动调整TextView的高度?
如何根据设备的宽度和字体大小测量TextView的高度?
没有成功如何获得身高?
在我的代码下面:
fun expand(view:View,duration:Long){
view.visibility = View.VISIBLE
view.measure(View.MeasureSpec.makeMeasureSpec(view.width,View.MeasureSpec.AT_MOST),
View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED))
val targetHeight:Int = view.measuredHeight
view.layoutParams.height = 0
val valueAnimator:ValueAnimator = ValueAnimator.ofInt(targetHeight)
valueAnimator.addUpdateListener {动画->
view.layoutParams.height = animation.animatedValue作为Int
view.requestLayout()
}
valueAnimator.interpolator = LinearInterpolator()
valueAnimator.duration =持续时间
valueAnimator.start()
}