Hala bu konuyu okuyan olup olmadığını bilmiyorum, ancak Jeff'in çözümü sizi sadece oraya götürür (kelimenin tam anlamıyla). OnMeasure'ın yapacağı şey, görüntünün yarısını ebeveynin yarısında göstermektir. Sorun şu ki, super.onMeasure öğesinden önce çağrılması setMeasuredDimension, görünümdeki tüm çocukları orijinal boyuta göre ölçecek, ardından setMeasuredDimensionyeniden boyutlandırdığında görünümü yarıya indirecek .
Bunun yerine, aramanız setMeasuredDimension(bir onMeasure geçersiz kılma için gerektiği gibi) veLayoutParams görünümünüz için yeni bir görünüm sağlamanız ve ardından aramanız gerekir super.onMeasure. LayoutParamsSizin görünümünüzün türünden değil, görünümünüzün ana türünden türetildiğinizi unutmayın .
@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);
}
Ebeveynle sorun yaşayacağın tek zaman, ebeveynin bir çocuk LayoutParamsolması olduğuna inanıyorum AbsoluteLayout(bu, kullanımdan kaldırıldı, ancak yine de bazen yararlıdır).