Constraintlayout 1.1新增了很多實(shí)用功能
今天用constraintset筒繁,constraintCircle做個展開菜單
GIF.gif
- constraintset可以方便的實(shí)現(xiàn)動畫亭引,轉(zhuǎn)換不同狀態(tài)約束到constraintlayout
-
constraintCircle 是可以一個控件以一定半徑圍繞另一個控件布局
WV5F2EJAF5E%CG1_A`Q%Q04.png
先看看constraintset官方的用法示例
總結(jié)用法就是:new ConstraintSet ,調(diào)用克隆記錄起、始狀態(tài)下布局的約束屬性柱蟀。然后調(diào)用applyTo生效屎即。如果要動畫過程就在applyto前調(diào)用TransitionManager.beginDelayedTransition(mConstraintLayout);
public class MainActivity extends AppCompatActivity {
ConstraintSet mConstraintSet1 = new ConstraintSet(); // create a Constraint Set
ConstraintSet mConstraintSet2 = new ConstraintSet(); // create a Constraint Set
ConstraintLayout mConstraintLayout; // cache the ConstraintLayout
boolean mOld = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Context context = this;
mConstraintSet2.clone(context, R.layout.state2); // get constraints from layout
setContentView(R.layout.state1);
mConstraintLayout = (ConstraintLayout) findViewById(R.id.activity_main);
mConstraintSet1.clone(mConstraintLayout); // get constraints from ConstraintSet
}
public void foo(View view) {
TransitionManager.beginDelayedTransition(mConstraintLayout);
if (mOld = !mOld) {
mConstraintSet1.applyTo(mConstraintLayout); // set new constraints
} else {
mConstraintSet2.applyTo(mConstraintLayout); // set new constraints
}
}
}
實(shí)現(xiàn)
寫兩套布局,一個是折疊狀態(tài)著角,一個是展開狀態(tài),保證相同控件id一致
用constraintSet記錄兩套布局的約束揪漩,調(diào)用applyTo生效
final ConstraintLayout constraintLayout = findViewById(R.id.constraint);
final ConstraintSet constraintSet = new ConstraintSet();
final ConstraintSet constraintSeto = new ConstraintSet();
constraintSet.clone(this, R.layout.activity_main2);
constraintSeto.clone(constraintLayout);
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
TransitionManager.beginDelayedTransition(constraintLayout, new ChangeBounds());
}
if (!change) {
constraintSet.applyTo(constraintLayout);
change = true;
} else {
change = false;
constraintSeto.applyTo(constraintLayout);
}
}
});