java - Android 动画布局和视图
问题描述
我有一个ConstraintLayout
底部的导航和一个占据屏幕其余部分的片段容器。我想要的是以编程方式在导航和带有动画的片段容器之间添加/删除视图。
我有这个代码来添加和动画新视图:
//Adding the view to the main layout
ConstraintLayout layout = findViewById(R.id.ConstraintLayout);
getLayoutInflater().inflate(R.layout.newView, layout);
//Start animation immediately with a library
YoYo.with(Techniques.SlideInUp).duration(800).playOn(findViewById(R.id.newView));
现在上面的代码对我来说看起来并不可靠。我想找到一个更好的方法,但现在它有效。
添加新视图后,我将片段容器的约束从导航顶部更改为新视图的顶部。片段容器的大小设置为 match_constrainst,因此通过更改约束,它现在会更小一些。
ConstraintSet constraintSet = new ConstraintSet();
constraintSet.clone(layout);
constraintSet.connect(R.id.fragment_container,ConstraintSet.BOTTOM,R.id.newViewWrapper,ConstraintSet.TOP,0);
constraintSet.applyTo(layout);
我没能做的是动画片段容器的大小变化。总的来说,我从未在 android 中使用过动画。
是否有更好或最佳实践方式在 android 中为视图和布局设置动画,或者是否有一个库可以做到这一点?
解决方案
如果你使用Constraintlayout
比你可以使用TransitionManager
你的布局动画。基本设置是这样的:
TransitionManager.beginDelayedTransition(layout);
例如,一旦您更改视图/约束的大小,它将自动为布局设置动画。
要更改约束,您可以使用ConstraintSet
.
推荐阅读
- jquery - jQuery val() 无法从输入中获取值
- javascript - 当您将 JavaScript (jQuery) 链接为单独的文件时,它有时不起作用
- vue.js - 如何使用 vue.js 和 element-ui 的文件上传组件在上传到服务器之前预览文件?
- c# - 在 C# 中根据样式获取 HTML 元素
- node.js - 使用超测试将查询字符串传递给 api 抛出错误:ECONNREFUSED:连接被拒绝
- oracle - 在执行查询之前验证结果
- .htaccess - 将 url 重写到另一个域,同时保留 url 的最后一部分
- java - InetAddress.getAllByName() 被阻塞
- reactjs - Firestore onSnapshot 更新并将数组添加到 DOM 而不是仅更新
- laravel - 如何在 Laravel 上更改集合结果中的字段名称