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 setMeasuredDimensionque 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 LayoutParamspara su vista, luego llamar super.onMeasure. Recuerde, LayoutParamsse 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 LayoutParamses si el padre es un AbsoluteLayout(lo cual está desaprobado pero a veces es útil).