为更方便地实现控件的变换动画,Android引入了ConstraintSet,来看下下面这个例子,我们需要将图1两个按钮的位置变换成图2两个按钮的位置,用补间动画和属性动画都可以实现,这里不讲这两种方式,来看看ConstraintSet的实现方式:
图1 图2两者的布局分别是activity_main.xml
activity_main.xml和activity_main1.xml
activity_main1.xmlMainActivity.java中的实现代码:
private ConstraintSetcs1, cs2;
private ConstraintLayoutcl;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
cs1 =new ConstraintSet();
cs2 =new ConstraintSet();
cl = findViewById(R.id.cl_container);
cs1.clone(cl);
cs2.clone(this, R.layout.activity_main1);
}
/**
* 变换成垂直
*/
private void vertical() {
TransitionManager.beginDelayedTransition(cl);
cs2.applyTo(cl);
}
/**
* 变换成水平
*/
private void horizontal() {
TransitionManager.beginDelayedTransition(cl);
cs1.applyTo(cl);
}
来看看效果:
水平变换成垂直 垂直变换成水平两个布局的ConstraintLayout的必须一致,子控件的id也必须一致,否则对应不上。ConstraintLayout中的子控件必须都有id,否则会报java.lang.RuntimeException: All children of ConstraintLayout must have ids to use ConstraintSet异常。假如activity_main1.xml的按钮1删掉了,则变换过程中Button1位置和样式不会发生变化。
网友评论