第三方开源库:nineoldandroid:ValueAnimator 动态设置textview的高

来源:互联网 发布:寻妈记 知乎 编辑:程序博客网 时间:2024/06/11 13:09

动态改变textview的高度。依赖jar:nineoldandroids-2.4.0.jar

效果图:


省份代码:

//1 默认不显示layout_provices.getLayoutParams().height = 0;layout_provices.requestLayout();//2 拿到布局的高layout_provices.measure(0, 0);maxHeight1 = layout_provices.getMeasuredHeight();layout_tv.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//3 创建ValueAnimator对象,这个必须放在监听中,因isOpen = !isOpen是动画执行后才执行的;if (isOpen) {animator = ValueAnimator.ofInt(maxHeight1,0);} else {animator = ValueAnimator.ofInt(0,maxHeight1);}//4 更新布局的监听animator.addUpdateListener(new AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator valueAnimator) {int height = (Integer) valueAnimator.getAnimatedValue();//5拿到实时高度layout_provices.getLayoutParams().height = height;layout_provices.requestLayout();//6 更新布局,让布局参数生效}});//执行动画及监听animator.setDuration(300).addListener(new LayoutTvAnimatorListener());animator.start();}});

 class LayoutTvAnimatorListener implements AnimatorListener{    @Overridepublic void onAnimationCancel(Animator animator) {}@Overridepublic void onAnimationEnd(Animator animator) {isOpen = !isOpen;}@Overridepublic void onAnimationRepeat(Animator animator) {}@Overridepublic void onAnimationStart(Animator animator) {//旋转图片ViewPropertyAnimator.animate(iv_arrow).rotationBy(180).setDuration(300).start();}        }

TextView代码:

/**
* 1 拿到textview的5行时候的高,和内容全部显示的时候的高
* 2  创建ValueAnimator对象,设置value的范围
* 3 给textview设置监听,获取实时高度,更新高度

*/

1 拿到textview的5行时候的高,和内容全部显示的时候的高

当textview的高度大于显示时的高度的时候,方法getMeasuredHeight是拿不到高度的。

       只有 textView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener()  可以

<span style="white-space:pre"></span>textView.setMaxLines(5);textView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {//当父布局完成后调用这个方法@Overridepublic void onGlobalLayout() {textView.getViewTreeObserver().removeGlobalOnLayoutListener(this);//即使移除监听minHeight = textView.getMeasuredHeight();//getHeight()也可以//获取textview内容全部显示时候的高,(放在外面无效)textView.setMaxLines(Integer.MAX_VALUE);textView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {@Overridepublic void onGlobalLayout() {textView.getViewTreeObserver().removeGlobalOnLayoutListener(this);maxHeight = textView.getHeight();//默认显示5行数据textView.getLayoutParams().height = minHeight;textView.requestLayout();}});}});

2  创建ValueAnimator对象,设置value的范围

3 给textview设置监听,获取实时高度,更新高度

textView.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {ValueAnimator animator = null;if (isOpen2) {//设置value的变化范围animator = ValueAnimator.ofInt(maxHeight,minHeight);} else {animator = ValueAnimator.ofInt(minHeight,maxHeight);}//给animator设置监听,实时的获取变化中的高度,把高赋值给textviewanimator.addUpdateListener(new AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator valueAnimator) {int value = (Integer) valueAnimator.getAnimatedValue();textView.getLayoutParams().height = value;textView.requestLayout();}});animator.setDuration(300).addListener(new TvAnimatorListener());animator.start();}});

class TvAnimatorListener implements AnimatorListener{    @Overridepublic void onAnimationCancel(Animator animator) {}@Overridepublic void onAnimationEnd(Animator animator) {isOpen2 = !isOpen2;}@Overridepublic void onAnimationRepeat(Animator animator) {}@Overridepublic void onAnimationStart(Animator animator) {}        }

代码:http://download.csdn.net/detail/ss1168805219/9489604


0 0