2017-10-16 4 views
0

Je souhaite positionner des vues en dehors d'un ConstraintLayout pour les animer avec une animation glissante. J'ai essayé de régler les contraintes comme constraintBottom_toTopOf="parent" mais le View reste à l'intérieur du conteneur.Vue de la position en dehors de ConstraintLayout

Notez que je veux réaliser cela avec des contraintes pour utiliser des animations intégrées, pas avec des animations dans le code.

Une idée de comment je pourrais faire cela?

J'utilise compile 'com.android.support.constraint:constraint-layout:1.1.0-beta1' avec Android Studio 3.0 Beta 7

Ceci est un simple fichier XML qui devrait placer le point de vue extérieur du conteneur:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:background="@color/colorAccent"> 

    <View 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:background="@color/colorPrimary" 
     app:layout_constraintBottom_toTopOf="parent"/> 


</android.support.constraint.ConstraintLayout> 

Mais ceci est le résultat
enter image description here

+0

Je ne l'ai jamais essayé mais qu'en est-varing le biais de 0 à 1? – Juan

+0

s'il vous plaît partager votre xml –

+0

Post quelle version de 'ConstraintLayout' vous utilisez. Assurez-vous que vous ne définissez pas de contraintes supplémentaires qui ramèneront la vue dans la mise en page. En outre, voir le XML serait utile. – Cheticamp

Répondre

2

Cela semble être un problème avec ConstraintLayout 1.1.0-beta1; Il fonctionne comme prévu dans ConstraintLayout 1.1.0-beta3.

Mettre à jour à ConstraintLayout 1.1.0-beta3. Je noterai également que vous devez contraindre votre vue horizontalement en procédant comme suit.

<View 
    android:layout_width="50dp" 
    android:layout_height="50dp" 
    android:background="@color/colorPrimary" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintBottom_toTopOf="parent" /> 

Sur une note de côté, les marges négatives ne sont pas acceptés dans ConstraintLayout. Voir this Stack Dépassement question concernant les marges négatives et ConstraintLayout.

+0

J'ai accepté cette réponse, car il a résolu ce problème particulier, mais sachez qu'il ramène un vieux problème où le' ConstraintLayout' est foiré dans un imbriquéScrollView –

+0

@DavidSeroussi Je suis désolé d'entendre que un autre problème est apparu. Vous pouvez publier une question traitant de ce problème d'affichage de défilement imbriqué avec le code XML à l'origine du problème. – Cheticamp

0

Dans chaque vue, vous pouvez utiliser une marge négative, qui placera la vue en dehors de la vue parente, puis définir les paramètres d'écrêtage.

android:clipChildren="false" 
android:clipToPadding="false" 

cela rendra la vue non découpable.

0

j'ai eu une autre façon de résoudre le problème:

1.Add une ancre (anchor_left) layout_constraintStart_toStartOf="parent".

2.Ajoutez YourViewlayout_constraintEnd_toStartOf="@+id/anchor_left"

Ca y est!

code:

<android.support.constraint.ConstraintLayout> 
    <View 
     android:id="@+id/anchor_left" 
     app:layout_constraintStart_toStartOf="parent"/> 

    <YourView 
     android:id="@+id/ll_left" 
     app:layout_constraintEnd_toStartOf="@+id/anchor_left"/> 
</android.support.constraint.ConstraintLayout>