/** * 获取控件自身的高度 */ public int getLongMeasureHeight(View ll_view){ int width=ll_view.getMeasuredWidth(); // 开始宽度 ll_view.getLayoutParams().height= ViewGroup.LayoutParams.WRAP_CONTENT;// 高度包裹内容 int widthMeasureSpec= View.MeasureSpec.makeMeasureSpec(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); int heightMeasureSpec= View.MeasureSpec.makeMeasureSpec(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); ll_view.measure(widthMeasureSpec,heightMeasureSpec);// return ll_view.getMeasuredHeight(); } ScrollView scrollView; boolean flag=true;// true展开了 false 没有展开 protected void expand(final View ll_view){ scrollView = getScrollView(ll_view); int startHeight; int targetHeith; if(!flag){ flag=true; startHeight = 0; targetHeith = getLongMeasureHeight(ll_view); }else { flag=false; startHeight=getLongMeasureHeight(ll_view); targetHeith=0; } final ViewGroup.LayoutParams layoutParams = ll_view.getLayoutParams(); ValueAnimator animator = ValueAnimator.ofInt(startHeight,targetHeith); animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { int value = (Integer) animation.getAnimatedValue(); layoutParams.height = value; ll_view.setLayoutParams(layoutParams); scrollView.clearAnimation(); scrollView.scrollTo(0,scrollView.getMeasuredHeight());//让scrollView移动到最下面 } }); animator.setDuration(500); animator.start(); } /** * 获取到界面的ScrollView */ public ScrollView getScrollView(View v){ ViewParent parent = v.getParent(); if(parent instanceof ViewGroup){ ViewGroup group = (ViewGroup) parent; if(group instanceof ScrollView){ return (ScrollView)group; }else { return getScrollView(group); } }else{ return null; } }
android 值动画,及控件测量
最新推荐文章于 2021-06-03 23:21:37 发布