问题描述
在屏幕上有一个可自由拖动的mainButton,当点击mainButton时会展开菜单,菜单展开遵循以下规则:当mainButton在屏幕上的左侧时,菜单展开在mainButton的右侧,反之同理。如图:
我的思路
在判断mainButton在屏幕上的位置后,通过改变ConstraintSet约束关系实现。
但在实现时,由于改变了约束关系mainButton的位置会显出抖动或者移位,理想的状态是,mainButton的位置不变,菜单根据mainButton的位置进行展开。
具体代码片
/**
* 更新布局约束
*/
public void updateConset() {
int radius = 200;
int angle = calculateAngularInterval();
if (mainFAB.isLeft()) {
setConset(ConstraintSet.START,radius,angle);
}else{
setConset(ConstraintSet.END,radius,angle * -1);
}
}
/**
* 设置布局约束
*/
private void setConset(int startOrEnd,int radius,int angle) {
ConstraintSet constraintSet = new ConstraintSet();
constraintSet.clone(this);
//清除首尾约束
constraintSet.clear(mainFAB.getId(),ConstraintSet.START);
constraintSet.clear(mainFAB.getId(),ConstraintSet.END);
//重新设置首尾约束
constraintSet.connect(mainFAB.getId(),startOrEnd,ConstraintSet.PARENT_ID,startOrEnd,0);
//设置顶部和顶部的约束,保证mainFAB垂直居中
constraintSet.connect(mainFAB.getId(),ConstraintSet.TOP,ConstraintSet.PARENT_ID,ConstraintSet.TOP,0);
constraintSet.connect(mainFAB.getId(),ConstraintSet.BOTTOM,ConstraintSet.PARENT_ID,ConstraintSet.BOTTOM,0);
for (int i = 1; i <= subButtonList.size(); i++) {
//子按钮按照半圆形等间隔排列
constraintSet.constrainCircle(subButtonList.get(i-1).getId(), mainFAB.getId(),radius,angle * i);
}
constraintSet.applyTo(this);
}