这个问题比较好玩,首先放上动画改变控件长宽的方法,比较简单,因为得通过LayoutParams设置宽高,所以说不能使用ObjectAnimator。

    private void animOut() {        ValueAnimator animator = ValueAnimator.ofInt(0, ScreenUtil.dip2px(25));        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {            @Override            public void onAnimationUpdate(ValueAnimator animation) {                ViewGroup.LayoutParams params = getLayoutParams();                params.height = (int) animation.getAnimatedValue();                setLayoutParams(params);            }        });        animator.setDuration(400);        animator.start();    }    private void animIn() {        ValueAnimator animator = ValueAnimator.ofInt(ScreenUtil.dip2px(25), 0);        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {            @Override            public void onAnimationUpdate(ValueAnimator animation) {                ViewGroup.LayoutParams params = getLayoutParams();                params.height = (int) animation.getAnimatedValue();                setLayoutParams(params);            }        });        animator.setDuration(400);        animator.start();    }

因为我是直接重写TextView,所以就没有tvXx.getLayoutParams了。

然后需要显示的话animOut() ;隐藏的话animIn() 

先确定一件事,上面的代码是正确的,可以使用的。当然假如你控件开始的时候是Gone就得先设置成VISIBLE。

失效的话,是隐藏的问题,它动画也会先进行,只是最后结果,却是本来高度为0的控件,变成WRAP_CONTENT,或者被拉伸,依旧显示在界面上。

碰到这种情况,比较偶然,当它的父布局是ConstraintLayout的时候就会最终控件无法隐藏。看到这里,有没有恍然大悟的。

问题就出现在 ValueAnimator.ofInt(ScreenUtil.dip2px(25), 0)  这里,可以看出,最终控件的高度是0,在ConstraintLayout布局中,高度是0代表着有高度,受到它边规则的影响,假如说他只有上面依赖于另一个控件,那他就是WRAP_CONTENT,假如上下都依赖了控件,他就会根据规则拉伸。

虽然没在LinearLayout里尝试,可以猜测,当设置了layout_weight属性,使用上面的animIn()也会出现这种问题。

 

解决办法,让该控件父布局不是ConstraintLayout,就行了。界面我也不贴了,就是一个小问题。

更多相关文章

  1. 【5年Android从零复盘系列之五】关于页面布局控件开发总结
  2. 三个博客和一张关系图,掌握Android WebView控件
  3. Android 控件大全
  4. Android AutoCompleteTextView控件实现类似百度搜索提示,限制输入
  5. ReactNative调用原生封装的代码和控件
  6. LinearLayout布局之weight
  7. Android 布局之LinearLayout
  8. Android——新手指引 指定View高光显示自定义控件
  9. Android基本控件 EditText

随机推荐

  1. SQL Server数据库中批量导入数据的四种方
  2. sqlserver数据库出现置疑的解决思路
  3. MSSQL 2005/2008 日志压缩清理方法小结
  4. SQL Server游标的使用/关闭/释放/优化小
  5. Sql学习第四天——SQL 关于with cube,wit
  6. sql server 还原数据库时提示数据库正在
  7. sqlserver中delete、update中使用表别名
  8. Sql学习第三天——SQL 关于CTE(公用表达
  9. Sql学习第三天——SQL 关于with ties介绍
  10. Sql学习第二天——SQL DML与CTE概述