Android Studio:以编程方式更改属性不会';设置约束后无法工作
我想在图像上的不同特定点上放置一些开关,并支持尽可能多的设备,我创建了一个方法,该方法创建了一个帧矩阵,开关应位于该矩阵上 方法如下:Android Studio:以编程方式更改属性不会';设置约束后无法工作,android,android-studio,attributes,constraints,Android,Android Studio,Attributes,Constraints,我想在图像上的不同特定点上放置一些开关,并支持尽可能多的设备,我创建了一个方法,该方法创建了一个帧矩阵,开关应位于该矩阵上 方法如下: public void initImageOverlayFrames() { //Create frames ImageView imageView = rootView.findViewById(R.id.image_gp); ConstraintSet constraintSet = new Constrain
public void initImageOverlayFrames() {
//Create frames
ImageView imageView = rootView.findViewById(R.id.image_gp);
ConstraintSet constraintSet = new ConstraintSet();
for(int i=0; i<imageOverlayFrames_x.length; i++){
imageOverlayFrames_x[i] = new FrameLayout(Objects.requireNonNull(getActivity()));
imageOverlayFrames_x[i].setId(View.generateViewId());
imageOverlayFrames_x[i].setLayoutParams(new FrameLayout.LayoutParams(imageView.getWidth()/imageOverlayFrames_x.length, imageView.getHeight()/imageOverlayFrames_y.length));
constraintLayout.addView(imageOverlayFrames_x[i]);
}
for(int i=0; i<imageOverlayFrames_y.length; i++){
imageOverlayFrames_y[i] = new FrameLayout(Objects.requireNonNull(getActivity()));
imageOverlayFrames_y[i].setId(View.generateViewId());
imageOverlayFrames_y[i].setLayoutParams(new FrameLayout.LayoutParams(imageView.getWidth()/imageOverlayFrames_x.length, imageView.getHeight()/imageOverlayFrames_y.length));
constraintLayout.addView(imageOverlayFrames_y[i]);
}
//Set the constraints for the Frames
constraintSet.clone(constraintLayout);
for(int i=0; i<imageOverlayFrames_x.length; i++){
if(i==0){
constraintSet.connect(imageOverlayFrames_x[i].getId(), ConstraintSet.START, imageView.getId(), ConstraintSet.START, 0);
}
else {
constraintSet.connect(imageOverlayFrames_x[i].getId(), ConstraintSet.START, imageOverlayFrames_x[i-1].getId(), ConstraintSet.END, 0);
}
constraintSet.connect(imageOverlayFrames_x[i].getId(), ConstraintSet.TOP, imageView.getId(), ConstraintSet.TOP, 0);
}
for(int i=0; i<imageOverlayFrames_y.length; i++){
if(i==0){
constraintSet.connect(imageOverlayFrames_y[i].getId(), ConstraintSet.TOP, imageView.getId(), ConstraintSet.TOP, 0);
}
else {
constraintSet.connect(imageOverlayFrames_y[i].getId(), ConstraintSet.TOP, imageOverlayFrames_y[i-1].getId(), ConstraintSet.BOTTOM, 0);
}
constraintSet.connect(imageOverlayFrames_y[i].getId(), ConstraintSet.START, imageView.getId(), ConstraintSet.START, 0);
}
constraintSet.applyTo(constraintLayout);
这非常有效,因此我创建了放置开关的方法:
private void placeSwitches(View view, int[][] positionArray, int[] idArray, final SwitchCompat[] switchCompatArray, int[] rotationArray) {
ConstraintSet constraintSet = new ConstraintSet();
constraintSet.clone(constraintLayout);
for (int i = 0; i < idArray.length; i++) {
switchCompatArray[i] = view.findViewById(idArray[i]);
switchCompatArray[i].setRotation(rotationArray[i]);
if(positionArray[i][0]<imageOverlayFrames_x.length && positionArray[i][1]<imageOverlayFrames_y.length){
constraintSet.connect(switchCompatArray[i].getId(), ConstraintSet.START, imageOverlayFrames_x[positionArray[i][0]].getId(), ConstraintSet.START); //Todo vor dem setzen überprüfen
constraintSet.connect(switchCompatArray[i].getId(), ConstraintSet.TOP, imageOverlayFrames_y[positionArray[i][1]].getId(), ConstraintSet.TOP);
}
}
constraintSet.applyTo(constraintLayout);
}
以及:
这是我的问题:
那switchCompatArray[i].setRotation(rotationArray[i])代码>什么都不做。开关不转。
但是当我在.xml布局文件中设置旋转时,它工作得非常好,为什么
private void placeSwitches(View view, int[][] positionArray, int[] idArray, final SwitchCompat[] switchCompatArray, int[] rotationArray) {
ConstraintSet constraintSet = new ConstraintSet();
constraintSet.clone(constraintLayout);
for (int i = 0; i < idArray.length; i++) {
switchCompatArray[i] = view.findViewById(idArray[i]);
switchCompatArray[i].setRotation(rotationArray[i]);
if(positionArray[i][0]<imageOverlayFrames_x.length && positionArray[i][1]<imageOverlayFrames_y.length){
constraintSet.connect(switchCompatArray[i].getId(), ConstraintSet.START, imageOverlayFrames_x[positionArray[i][0]].getId(), ConstraintSet.START); //Todo vor dem setzen überprüfen
constraintSet.connect(switchCompatArray[i].getId(), ConstraintSet.TOP, imageOverlayFrames_y[positionArray[i][1]].getId(), ConstraintSet.TOP);
}
}
constraintSet.applyTo(constraintLayout);
}
final int[] switchIdArray = {R.id.switch_1, R.id.switch_2, R.id.switch_3,..., R.id.switch_15, R.id.switch_16};
final SwitchCompat[] switchSwitchCompatArray = new SwitchCompat[switchIdArray.length];
final int[] switchRotationArray = new int[]{90, 255,..., 90, 90};
final int[][] switchPositionArray = new int[][]{{25, 13}, {4, 9}, {7, 8},..., {0, 0}};