Cambio del porcentaje de orientación en la programación de restricciones mediante programación

Tengo una guía en el diseño de restricciones como este

<android.support.constraint.Guideline android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/guideline8" app:layout_constraintGuide_percent="0.5" android:orientation="vertical"/> 

Más tarde, quiero cambiar la app:layout_constraintGuide_percent valor a otra cosa condicionalmente. Cómo puedo conseguir esto.

Este código cambiará tu guíaPercent a 0

 ConstraintLayout.LayoutParams lp = (ConstraintLayout.LayoutParams) guideline.getLayoutParams(); lp.guidePercent = 0; guideline.setLayoutParams(lp); 

Hay dos maneras de hacerlo:

  • Uso de ConstraintLayout.LayoutParams

Este método obtiene un parámetro específico de ConstraintLayout y lo modifica.

 Guideline guideLine = (Guideline) findViewById(R.id.your_guideline); ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) guideLine.getLayoutParams(); params.guidePercent = 0.45f; // 45% // range: 0 <-> 1 guideLine.setLayoutParams(params); 
  • Utilizar ConstraintSet

Este método consiste en clonar los atributos de ConstraintLayout , modificarlos y luego aplicarlos a la View .

PERO es muy lento.

 ConstraintLayout constraintLayout = (ConstraintLayout) findViewById(R.id.your_constraint_with_guideline); ConstraintSet constraintSet = new ConstraintSet(); constraintSet.clone(constraintLayout); constraintSet.setGuidelinePercent(R.id.your_guideline, 0.07f); // 7% // range: 0 <-> 1 TransitionManager.beginDelayedTransition(constraintLayout); constraintSet.applyTo(constraintLayout); 

Creación de un efecto de paralaje

Para probar esos métodos, creé una animación de paralaje usando una GuideLine y un ScrollView en la parte superior.

En AndroidManifest.xml , dentro de su Activity , añada esto: android:hardwareAccelerated="true" .

  <activity android:name=".MainActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:hardwareAccelerated="true"> ... 

MainActivity.java

 Guideline guideTopInfo; ConstraintLayout constraintLayout; ConstraintLayout.LayoutParams params; ConstraintSet constraintSet; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); guideTopInfo = (Guideline) findViewById(R.id.guideline2); constraintLayout = (ConstraintLayout) findViewById(R.id.constraint_root); params = (ConstraintLayout.LayoutParams) guideTopInfo.getLayoutParams(); //constraintSet = new ConstraintSet(); //constraintSet.clone(constraintLayout); final ScrollView scrollView = (ScrollView) findViewById(R.id.scroll_front); scrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() { @Override public void onScrollChanged() { float percentage = scrollView.getScrollY() * 0.0001f; // 0.001f faster // 0.00001f slower parallax animation Log.d("mLog", String.valueOf(percentage)); if(percentage >= 0) { // my XML percentage value was 12% params.guidePercent = 0.12f - percentage; // up //params.guidePercent = 0.12f + percentage; // downm guideTopInfo.setLayoutParams(params); //constraintSet.setGuidelinePercent(R.id.guideline2, 0.12f - percentage); //TransitionManager.beginDelayedTransition(constraintLayout); //constraintSet.applyTo(constraintLayout); } } }); } 

Mi otra respuesta sobre paralaje si alguien está interesado. 😉

Debe utilizar el objeto ConstraintSet para establecer layout_constraintGuide_percent en el código.

A continuación se muestra el código para establecer layout_constraintGuide_percent en el código. Primero usted necesita crear el objeto del sistema de la restricción, método del clon de la llamada que pasa constraintlayout y entonces llamada setGuidelinePercent que pasa el ID de la guía y la proporción.

  ConstraintSet constraintSet = new ConstraintSet(); constraintSet.clone(constraintLayout); constraintSet.setGuidelinePercent(R.id.guideline, 0.4f); 
  • ConstraintLayout vs Coordinator?
  • ¿Es posible desplazar un ScrollView con un ConstraintLayout en Blueprint Mode?
  • El diseño de restricciones ignora las propiedades de los márgenes al especificarlas desde el inspector de propiedades
  • Cómo imitar el LinearLayout ponderado con un diseño de restricción
  • ¿Cómo puedo obtener la última versión de ConstraintLayout para Android?
  • Cómo suprimir el error de diseño de restricciones "MATCH_PARENT no se admite en ConstraintLayout"
  • Cómo posicionar debajo de la más baja de dos vistas en ConstraintLayout?
  • Diseño de restricciones en lugar de diseño relativo
  • Android Studio 2.2 preview 1 Error de EditText
  • ConstraintLayout relación de aspecto
  • ¿Dónde puedo comprobar la versión más reciente NUMBER del diseño de restricciones?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.