No sé si alguien todavía está leyendo este hilo o no, pero la solución de Jeff solo te llevará a la mitad (un poco literalmente). Lo que hará su onMeasure es mostrar la mitad de la imagen en la mitad del padre. El problema es que llamar a super.onMeasure antes de setMeasuredDimension
que medirá todos los elementos secundarios de la vista en función del tamaño original, luego simplemente cortará la vista por la mitad cuando elsetMeasuredDimension
cambie tamaño.
En su lugar, debe llamar setMeasuredDimension
(según sea necesario para una anulación de onMeasure) y proporcionar una nueva LayoutParams
para su vista, luego llamar super.onMeasure
. Recuerde, LayoutParams
se derivan del tipo principal de su vista, no del tipo de su vista.
@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);
}
Creo que la única vez que tendrá problemas con el padre LayoutParams
es si el padre es un AbsoluteLayout
(lo cual está desaprobado pero a veces es útil).