首先onCreate方法执行完了以后,我们定义的控件才会被度量(measure),所以我们在onCreate方法里面获取控件的高度或者宽度结果是0,因为它自己还没有被度量,也就是说他自己都不知道自己有多高,而你这时候去获取它的尺寸,肯定是不行的.(可以在点击事件里获取)
获取控件位置的方法
val array= IntArray(2)//定义一个两位的数组 分别来存放x从标和y坐标
view.getLocationOnScreen(array)//将控件的xy坐标通过此方法得出来放在数组里
x= locationY[0]//控件的x坐标
y= locationY[1]//控件的y坐标
获取控件宽高的方法(此方法可以直接使用)
/**
* 获取控件的高度或者宽度 isHeight=true则为测量该控件的高度,isHeight=false则为测量该控件的宽度
* @param view
* @param isHeight
* @return
*/
fun getViewHeight(view: View?, isHeight: Boolean): Int {
val result: Int
if (view ==null)return 0
if (isHeight) {
val h = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)
view.measure(h,0)
result =view.measuredHeight
}else {
val w = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)
view.measure(0, w)
result =view.measuredWidth
}
return result
}
用动画改变控件的高度(宽度)
private fun startPropertyAnimation(target: View, startValue: Int, endValue: Int) {
val intEvaluator = IntEvaluator()
//将动画值限定在(1,100)之间
val valueAnimator = ValueAnimator.ofInt(1,100)
//动画持续时间
valueAnimator.duration =1000
//监听动画的执行
valueAnimator.addUpdateListener{ valueAnimator->
//得到当前瞬时的动画值,在(1,100)之间
val currentAnimatedValue = valueAnimator.animatedValue as Int
//计算得到当前系数fraction
val fraction = currentAnimatedValue /100f
println("currentAnimatedValue=$currentAnimatedValue,fraction=$fraction")
//评估出当前的宽度其设置
target.layoutParams.height = intEvaluator.evaluate(fraction, startValue, endValue)!!
target.requestLayout()
}
//开始动画
valueAnimator.start()
}