android 2各textview 动画,TextView在Android Market中扩展动画

该博客主要介绍了如何在Android中动态测量并改变View的高度,通过反射调用`onMeasure`方法来测量视图高度,并创建动画实现视图的展开或折叠效果。在`expandOrCollapse`方法中,根据视图当前高度与目标高度执行动画,动画过程中不断更新布局高度,实现了平滑的展开和折叠动画。
摘要由CSDN通过智能技术生成

解:

private static int measureViewHeight( View view2Expand, View view2Measure ) {

try {

Method m = view2Measure.getClass().getDeclaredMethod("onMeasure", int.class, int.class);

m.setAccessible(true);

m.invoke(view2Measure,

MeasureSpec.makeMeasureSpec(view2Expand.getWidth(), MeasureSpec.AT_MOST),

MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));

} catch (Exception e) {

return -1;

}

int measuredHeight = view2Measure.getMeasuredHeight();

return measuredHeight;

}

static public void expandOrCollapse( View view2Expand, View view2Measure,

int collapsedHeight ) {

if (view2Expand.getHeight() < collapsedHeight)

return;

int measuredHeight = measureViewHeight(view2Expand, view2Measure);

if (measuredHeight < collapsedHeight)

measuredHeight = collapsedHeight;

final int startHeight = view2Expand.getHeight();

final int finishHeight = startHeight <= collapsedHeight ?

measuredHeight : collapsedHeight;

view2Expand.startAnimation(new ExpandAnimation(view2Expand, startHeight, finishHeight));

}

class ExpandAnimation extends Animation {

private final View _view;

private final int _startHeight;

private final int _finishHeight;

public ExpandAnimation( View view, int startHeight, int finishHeight ) {

_view = view;

_startHeight = startHeight;

_finishHeight = finishHeight;

setDuration(220);

}

@Override

protected void applyTransformation( float interpolatedTime, Transformation t ) {

final int newHeight = (int)((_finishHeight - _startHeight) * interpolatedTime + _startHeight);

_view.getLayoutParams().height = newHeight;

_view.requestLayout();

}

@Override

public void initialize( int width, int height, int parentWidth, int parentHeight ) {

super.initialize(width, height, parentWidth, parentHeight);

}

@Override

public boolean willChangeBounds( ) {

return true;

}

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值