TextView默认开始显示5行
//设置为5行--开始时默认显示五行
tvDes.setMaxLines(5);
获取5行的高度和全部高度
//设置为5行--开始时默认显示五行
tvDes.setMaxLines(5);
//保证获取到正确的高度
tvDes.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
//移除观察者
tvDes.getViewTreeObserver().removeGlobalOnLayoutListener(this);
//获取tvDes的5行的高度
minHeight = tvDes.getHeight();
//让tv_des恢复原来的高度
tvDes.setMaxLines(Integer.MAX_VALUE);//该方法会让TextView重新测量和布局--因此也需要官产
//再次设置布局监听器
tvDes.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
//移除观察者
tvDes.getViewTreeObserver().removeGlobalOnLayoutListener(this);
//获取最大的高度,就是原来的本身的高度
maxHeight = tvDes.getHeight();
//再将TextView设置为5行的高度
ViewGroup.LayoutParams params = tvDes.getLayoutParams();
params.height = minHeight;
tvDes.setLayoutParams(params);
}
});
}
});
动画切换
int minHeight;
int maxHeight;
//开关的话就定义个boolean值进行设置--最后取反
boolean isOpen = false;//是否是打开
@OnClick(R.id.detail_des)
public void onViewClicked() {
ValueAnimator animator = null;
if (isOpen) {
//关闭动画--只有值的变化
animator = ValueAnimator.ofInt(maxHeight, minHeight);
} else {
//打开动画--只有值的变化
animator = ValueAnimator.ofInt(minHeight, maxHeight);
}
//监听动画值的变化
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int animatedValue = (int) animation.getAnimatedValue();
//设置给控件的高度
ViewGroup.LayoutParams params = tvDes.getLayoutParams();
params.height = animatedValue;
tvDes.setLayoutParams(params);
}
});
//开启动画
animator.setDuration(600).start();
isOpen = !isOpen;
}
scrollview跟随滚动
在增高的时候往上滚
//如果当前是展开动画,则需要让ScrollView进行滚动
//参1--x方向滚动 参2y方向滚动--getMaxScrollAmount()最大滚动距离
if (isOpen) {
scrollView.scrollTo(0, scrollView.getMaxScrollAmount());
}