Chiarimento: la risposta sotto rimane valida, ma voglio chiarire un paio di cose. La soluzione originale posizionerà una vista con un offset de facto negativo rispetto a un'altra vista come indicato e apparirà nel layout come mostrato.
Un'altra soluzione è usare la proprietà translationY come suggerito da Amir Khorsandi qui . Preferisco quella soluzione più semplice con un avvertimento: la traduzione avviene dopo il layout , quindi le viste che sono vincolate alla vista spostata non seguiranno la traduzione.
Ad esempio, il codice XML seguente mostra due TextView immediatamente sotto l'immagine. Ogni vista è vincolata dall'alto verso il basso con la vista che appare immediatamente sopra di essa.

<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imageView"
android:layout_width="150dp"
android:layout_height="150dp"
android:tint="#388E3C"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_action_droid" />
<TextView
android:id="@+id/sayName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Say my name."
android:textAppearance="@style/TextAppearance.AppCompat.Large"
app:layout_constraintTop_toBottomOf="@+id/imageView"
app:layout_constraintEnd_toEndOf="@+id/imageView"
app:layout_constraintStart_toStartOf="@+id/imageView" />
<TextView
android:id="@+id/sayIt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Say it."
android:textAppearance="@style/TextAppearance.AppCompat.Large"
app:layout_constraintEnd_toEndOf="@+id/sayName"
app:layout_constraintStart_toStartOf="@+id/sayName"
app:layout_constraintTop_toBottomOf="@id/sayName" />
</androidx.constraintlayout.widget.ConstraintLayout>
Ora, traduciamo in alto il TextView "Pronuncia il mio nome" 50dpspecificando
android:translationY="-50dp"
Questo produce quanto segue:

Il TextView "Say my name" è stato spostato come previsto, ma il TextView "Say it" non lo ha seguito come ci si potrebbe aspettare. Questo perché la traduzione avviene dopo il layout . Sebbene la vista si sposti dopo il layout, può comunque essere resa cliccabile nella nuova posizione.
Quindi, IMO, vai con translationX e translationY per margini negativi in ConstraintLayout se l'avvertenza sopra non influisce sul tuo layout; altrimenti, vai con il widget dello spazio come descritto di seguito.
Risposta originale
Sebbene non sembri che i margini negativi saranno supportati ConstraintLayout, esiste un modo per ottenere l'effetto utilizzando gli strumenti disponibili e supportati. Ecco un'immagine in cui il titolo dell'immagine è sovrapposto 22dpdalla parte inferiore dell'immagine - effettivamente un -22dpmargine:

Ciò è stato ottenuto utilizzando un Spacewidget con un margine inferiore uguale all'offset desiderato. Il Spacewidget ha quindi la sua parte inferiore vincolata alla parte inferiore del file ImageView. Ora tutto ciò che devi fare è vincolare la parte superiore del TextViewcon il titolo dell'immagine alla parte inferiore del Spacewidget. Il TextViewsarà posizionato nella parte inferiore della Spacevista ignorando il margine che è stato impostato.
Quello che segue è l'XML che realizza questo effetto. Noterò che lo uso Spaceperché è leggero e destinato a questo tipo di utilizzo, ma avrei potuto usarne un altro tipo Viewe renderlo invisibile. (Probabilmente dovrai apportare modifiche, però.) Potresti anche definire a Viewcon margini zero e l'altezza del margine interno che desideri, e vincolare la parte superiore della TextViewparte superiore del riquadro View.
Un altro approccio potrebbe essere quello di sovrapporre il TextViewsopra ImageViewallineando le parti superiori / inferiori / sinistre / destra e apportare le opportune modifiche ai margini / riempimento. Il vantaggio dell'approccio dimostrato di seguito è che è possibile creare un margine negativo senza troppi calcoli. Questo è tutto per dire che ci sono diversi modi per affrontare questo problema.
Aggiornamento: per una rapida discussione e dimostrazione di questa tecnica, vedere il post del blog di Google Developers Medium .
Margine negativo per ConstraintLayoutXML
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@mipmap/ic_launcher" />
<android.support.v4.widget.Space
android:id="@+id/marginSpacer"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginBottom="22dp"
app:layout_constraintBottom_toBottomOf="@+id/imageView"
app:layout_constraintLeft_toLeftOf="@id/imageView"
app:layout_constraintRight_toRightOf="@id/imageView" />
<TextView
android:id="@+id/editText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Say my name"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/marginSpacer" />
</android.support.constraint.ConstraintLayout>