Eu não sei se alguém ainda está lendo este tópico ou não, mas a solução de Jeff só vai te levar até a metade do caminho (meio que literalmente). O que seu onMeasure fará é exibir metade da imagem na metade do pai. O problema é que chamar super.onMeasure antes de setMeasuredDimension
medirá todos os filhos na exibição com base no tamanho original, depois apenas cortará a exibição pela metade quando for setMeasuredDimension
redimensionada.
Em vez disso, você precisa chamar setMeasuredDimension
(conforme necessário para uma substituição onMeasure) e fornecer um novo LayoutParams
para sua visualização e, em seguida , ligar super.onMeasure
. Lembre-se, você LayoutParams
é derivado do tipo-pai da sua visão, não do tipo da sua visão.
@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);
}
Acredito que a única vez que você terá problemas com o pai LayoutParams
é se ele for um AbsoluteLayout
(o que está obsoleto, mas às vezes é útil).