Can anyone point to solution how to make expand animation of Description TextView in Android Market animation? There are TextView wrapped into FrameLayout which expands after clicking on 'More' label.
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
Solution:
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;
}
};