android - LinearLayout 显示然后动画
问题描述
我的布局是关于展开和折叠线性布局
正在上升的崩溃运行良好
但是向下扩展,它显示整个视图在很短的时间内扩展,例如(1ms 或 2ms),然后开始向下动画。
这有点烦人,因为它显示布局,然后动画布局下降。
public void expand(final View v) {
v.measure(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
final int targetHeight = v.getMeasuredHeight();
// Older versions of android (pre API 21) cancel animations for views with a height of 0.
v.getLayoutParams().height = 1;
v.setVisibility(View.VISIBLE);
Animation a = new Animation()
{
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
v.getLayoutParams().height = interpolatedTime == 1
? WindowManager.LayoutParams.WRAP_CONTENT
: (int)(targetHeight * interpolatedTime);
v.requestLayout();
}
@Override
public boolean willChangeBounds() {
return true;
}
};
// 1dp/ms
a.setDuration((int) (targetHeight / v.getContext().getResources().getDisplayMetrics().density));
v.startAnimation(a);
}
public static void collapse(final View v) {
final int initialHeight = v.getMeasuredHeight();
Animation a = new Animation()
{
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
if(interpolatedTime == 1){
v.setVisibility(View.GONE);
}else{
v.getLayoutParams().height = initialHeight - (int)(initialHeight * interpolatedTime);
v.requestLayout();
}
}
@Override
public boolean willChangeBounds() {
return true;
}
};
// 1dp/ms
a.setDuration((int)(initialHeight / v.getContext().getResources().getDisplayMetrics().density));
v.startAnimation(a);
}
解决方案
推荐阅读
- react-admin - react-admin selectArrayInput 没有选择
- android - 如何更改 SeekBar 中每个刻度标记的颜色
- javascript - 为什么我不能添加到数字对象属性?
- javascript - 在 chrome 浏览器中调试时无法访问顶级模块变量
- r - 在R闪亮中将列类型从因子更改为整数
- javascript - 正则表达式匹配在搜索中省略第一个字符
- javascript - 如何使用 d3 绘制连续线而无需单击并拖动鼠标,而只需使用 mouseover 事件?
- spring-boot - Spring Boot 的 ResourceNotFoundException 在哪里?
- php - 更新表错误?(SQLSTATE[HY000]:一般错误)
- java - 在 Java 中读取 Excel 文件的开源版本