话不多说,直接上代码
MainActivity.class
private ConstraintSet constraintSet1;
private ConstraintSet constraintSet2;
ConstraintLayout constraintLayout;
boolean old = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMain1Binding binding = DataBindingUtil.setContentView(this, R.layout.activity_main1);
constraintLayout = (ConstraintLayout) binding.getRoot();
constraintSet1 = new ConstraintSet();
constraintSet1.clone(constraintLayout);
constraintSet2 = new ConstraintSet();
constraintSet2.clone(this,R.layout.activity_main2);
binding.setOnClick(this);
}
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
public void onClick(View v) {
TransitionManager.beginDelayedTransition(constraintLayout);
if (old = !old){
constraintSet1.applyTo(constraintLayout);
}else{
constraintSet2.applyTo(constraintLayout);
}
}
activity_main1.xml
<android.support.constraint.ConstraintLayout
android:id="@+id/cl_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"/>
<Button
android:onClick="@{onClick}"
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="切换动画"
android:textSize="14dp"
android:textColor="@color/colorPrimary"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
activity_main2.xml
<android.support.constraint.ConstraintLayout
android:id="@+id/cl_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="切换动画"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" />
</android.support.constraint.ConstraintLayout>
最后总结下几个注意事项:
constrainset , 动画基于布局文件,需要两个约束位置不同的布局
-
根布局必须为constrainlayout
-
子view都必须有id
-
动画只支持 约束条件的变化,view的属性修改无效,像text view的字体大小,颜色.
-
动画布局可以只包含要做动画的布局,其他可以舍弃(activity_main1比activity_main2多了一个image view)