android中获取控件的位置和宽高和用动画改变控件高度(宽度)

首先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()

}

你可能感兴趣的:(android中获取控件的位置和宽高和用动画改变控件高度(宽度))