Ich weiß nicht, ob noch jemand diesen Thread liest oder nicht, aber Jeffs Lösung bringt Sie nur halbwegs ans Ziel (im wahrsten Sinne des Wortes). Was seine onMeasure tun wird, ist die Hälfte des Bildes in der Hälfte des Elternteils anzuzeigen. Das Problem ist, dass der Aufruf super.onMeasure vor dem setMeasuredDimension
misst alle Kinder in der Ansicht auf der Grundlage der ursprünglichen Größe und halbiert dann die Ansicht, wenn die setMeasuredDimension
ändert sie die Größe.
Stattdessen müssen Sie Folgendes aufrufen setMeasuredDimension
(wie für eine onMeasure-Überschreibung erforderlich) und eine neue LayoutParams
für Ihre Ansicht, dann aufrufen super.onMeasure
. Denken Sie daran, dass Ihr LayoutParams
werden von dem übergeordneten Typ Ihrer Ansicht abgeleitet, nicht von dem Typ Ihrer Ansicht.
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
int parentHeight = MeasureSpec.getSize(heightMeasureSpec);
this.setMeasuredDimension(parentWidth/2, parentHeight);
this.setLayoutParams(new *ParentLayoutType*.LayoutParams(parentWidth/2,parentHeight));
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
Ich glaube, das einzige Mal, dass Sie Probleme mit den Eltern haben werden LayoutParams
ist, wenn der Elternteil ein AbsoluteLayout
(was veraltet, aber manchmal noch nützlich ist).
0 Stimmen
Es ist möglich, das mit ConstraintLayout zu tun, überprüfen Sie dies: stackoverflow.com/questions/37318228/