Ich habe eine benutzerdefinierte Ansicht geschrieben. Abhängig von seinem Inhalt möchte ich es ein wenig nach oben verschieben, dass es die ImageView
überlappt.Kann eine benutzerdefinierte Ansicht ihre Position ändern?
Dazu setze ich einen neuen Y-Wert in onLayout
. Der Blick nach oben bewegt, aber es gibt jetzt einen leeren Raum unterhalb der Ansicht links :-(
onLayout
in meiner benutzerdefinierten Ansicht:
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
setY(getY() - mOverlap);
}
Dies ist das Layout:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="4dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="4dp"
app:cardBackgroundColor="@color/eventitem_background">
<android.support.percent.PercentRelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/imageView_cell_event"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_aspectRatio="266%"
app:layout_widthPercent="100%"/>
<me.veents.ui.views.EventListView
android:id="@+id/eventListView_cell_event"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/imageView_cell_event"/>
</android.support.percent.PercentRelativeLayout>
</android.support.v7.widget.CardView>
Um die Y-Position der Ansicht einzustellen, tun Sie das besser in 'onDraw()' als 'onLayout()' oder schließen Sie die 'nineolddroids'-Bibliothek ein, da Sie darauf zugreifen können die X/Y-Positionen der Ansichten und animieren ihre Übergänge zu neuen Werten. Andernfalls verschiebe es zuerst und rufe dann 'super.onLayout (geändert, links, top-moverp, rechts, unten-moverp) auf; aber ich bin mir nicht sicher, ob das funktioniert. – Shark
Es hat den gleichen Effekt. Es sieht so aus, dass das übergeordnete Layout seine Größe nicht verringert, wenn ich die Ansicht verschiebe. –
parentLayout wird niemals wirklich neu skalieren, wenn die Kindsansichten verschoben werden, um (hoffentlich) das zu erreichen, müssen Sie 'parentLayout.requestLayout();' ausführen, da dies intern 'measure();' und 'layout() ; 'was (hoffentlich hoffentlich) das gewünschte Ergebnis liefert und seine Dimensionen aktualisiert/neu berechnet. – Shark