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.
- ¿Cómo lograr superposición / margen negativo en la disposición de restricciones?
- Agrupar las vistas en ConstraintLayout para tratarlas como una sola vista
- Los atributos de anchura y altura de la distribución de restricciones se restablecen automáticamente a 0dp
- ¿Por qué Android Studio está eliminando y / o cambiando las limitaciones de layout_margin *?
- ConstraintLayout forma de contenido cambiado si se desplaza
- ConstraintLayout: ¿Qué hace `layout_constraintLeft_creator` en xml?
- Vista de imagen en la parte superior de cardview
- Android - ¿Cómo hacer una restricción desplazable?
- Android ConstraintLayout @dimens reemplazado con valores codificados
- Cómo centrar los elementos en ConstraintLayout
- Establecer el ancho para que coincida con las restricciones de ConstraintLayout
- Color de TextView muestra como blanco en un dispositivo real con ConstraintLayout
- Cómo agrupar varias vistas en un ConstraintLayout
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 laView
.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);
- Error de NewFromFD en nativeDecodeFileDescriptor – Android 4.4
- Pasar la cookie al navegador a través de Intent