android - 我可以为constraintLayout动画完成时设置回调吗
问题描述
我刚刚开始学习动画,我正在尝试在约束布局更改动画完成后添加另一个视图。我添加了一个监听器,用于当约束布局发生变化但在动画开始时触发,而不是在动画完成后触发。
rootConstraintLayout.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
Log.d(TAG, "onLayoutChange: testing ");
}
});
这是我调用更改布局的方法
private void changeExamplePageLayout() {
ConstraintSet constraintSetBeforeExample = new ConstraintSet();
ConstraintSet constraintSetAfterExample = new ConstraintSet();
constraintSetBeforeExample.clone(rootConstraintLayout);
constraintSetAfterExample.clone(getContext(), R.layout.example_fragment_sub_set);
TransitionManager.beginDelayedTransition(rootConstraintLayout);
constraintSetAfterExample.applyTo(rootConstraintLayout);
}
任何我应该看的方向都将不胜感激。
解决方案
所以我解决了这个问题,
而不是这里的代码=
rootConstraintLayout = view.findViewById(R.id.rootConstraintLayout);
constraintSetBeforeExample = new ConstraintSet();
constraintSetAfterExample = new ConstraintSet();
constraintSetBeforeExample.clone(rootConstraintLayout);
constraintSetAfterExample.clone(getContext(),R.layout.example_fragment_sub_set);
TransitionManager.beginDelayedTransition(rootConstraintLayout);
如果您没有在 delayTransition 方法中提供转换管理器,则转换管理器使用默认转换,我创建了自己的转换,您可以向其中添加侦听器。
rootConstraintLayout = view.findViewById(R.id.rootConstraintLayout);
constraintSetBeforeExample = new ConstraintSet();
constraintSetAfterExample = new ConstraintSet();
constraintSetBeforeExample.clone(rootConstraintLayout);
constraintSetAfterExample.clone(getContext(),R.layout.example_fragment_sub_set);
Transition transition = new ChangeBounds();
transition.addListener(new Transition.TransitionListener() {
@Override
public void onTransitionStart(@NonNull Transition transition) {
}
@Override
public void onTransitionEnd(@NonNull Transition transition) {
if (layoutChanged) {
addExampleQuestionFragment();
}
}
@Override
public void onTransitionCancel(@NonNull Transition transition) {
}
@Override
public void onTransitionPause(@NonNull Transition transition) {
}
@Override
public void onTransitionResume(@NonNull Transition transition) {
}
});
然后将刚刚创建的转换设置为方法中的参数
TransitionManager.beginDelayedTransition(rootConstraintLayout, transition);
希望他的帮助,如果其他人有这个问题
推荐阅读
- reactjs - 反应路由器未在 url 更新时显示组件
- c# - 如何过滤来自表单帖子的数据库结果?
- django - 尝试连接 /admin 页面时 Django 服务器死机
- python - 比较由 PDF 页面制作的 Tif 文件
- javascript - 反应图像轮播
- python - 在 SQLite3 中使用 executemany 执行 UPDATE 语句
- c# - 为一类对象赋值
- java - 数组的方法和命令
- python - 如何使用 Python 3.7 或更高版本查看 Jupyter Lab 中所有已安装的 Python 模块(如 pip freeze)?
- java - 如何直接消除文本字段 JavaFx 中的字符,以便用户无法输入字符?