博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第三方开源库:nineoldandroid:ValueAnimator 动态设置textview的高
阅读量:4129 次
发布时间:2019-05-25

本文共 3762 字,大约阅读时间需要 12 分钟。

动态改变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() {						@Override			public 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() {										@Override					public 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{    			@Override		public void onAnimationCancel(Animator animator) {					}		@Override		public void onAnimationEnd(Animator animator) {			isOpen = !isOpen;		}		@Override		public void onAnimationRepeat(Animator animator) {					}		@Override		public 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()  可以

		textView.setMaxLines(5);		textView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {			//当父布局完成后调用这个方法			@Override			public void onGlobalLayout() {				textView.getViewTreeObserver().removeGlobalOnLayoutListener(this);//即使移除监听				minHeight = textView.getMeasuredHeight();//getHeight()也可以								//获取textview内容全部显示时候的高,(放在外面无效)				textView.setMaxLines(Integer.MAX_VALUE);				textView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {										@Override					public 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() {						@Override			public void onClick(View v) {				ValueAnimator animator = null;				if (isOpen2) {//设置value的变化范围					animator = ValueAnimator.ofInt(maxHeight,minHeight);				} else {					animator = ValueAnimator.ofInt(minHeight,maxHeight);				}				//给animator设置监听,实时的获取变化中的高度,把高赋值给textview				animator.addUpdateListener(new AnimatorUpdateListener() {										@Override					public 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{    			@Override		public void onAnimationCancel(Animator animator) {					}		@Override		public void onAnimationEnd(Animator animator) {			isOpen2 = !isOpen2;		}		@Override		public void onAnimationRepeat(Animator animator) {					}		@Override		public void onAnimationStart(Animator animator) {		}    	    }
代码:http://download.csdn.net/detail/ss1168805219/9489604

你可能感兴趣的文章
phpstorm 集成 xdebug 进行调试
查看>>
npm和node升级的正确方式
查看>>
laravel事务
查看>>
springcloud 连续请求 500
查看>>
vue复用新增和编辑表单
查看>>
Ubuntu 16.04 apt-get更换为国内阿里云源
查看>>
laravel部署到宝塔步骤
查看>>
小程序获取access_token
查看>>
navicat远程连接mysql数据库
查看>>
tp5令牌数据无效 解决方法
查看>>
自己的网站与UCenter整合(大致流程)
查看>>
laravel 制作通用的curd 后台操作
查看>>
【小红书2017年笔试】求一个数组中平均数最大的子数组
查看>>
Linux基础系列-定时器与时间管理
查看>>
Linux基础系列-可执行程序的产生过程
查看>>
Linux基础系列-Kernel 初始化宏
查看>>
Linux子系统系列-I2C
查看>>
<iOS>关于自定义description的一点用法
查看>>
Unix 命令,常用到的
查看>>
DLL中建立进程共享数据段需要注意的语法问题
查看>>