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 setMeasuredDimension
yeniden 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
. LayoutParams
Sizin 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 LayoutParams
olması olduğuna inanıyorum AbsoluteLayout
(bu, kullanımdan kaldırıldı, ancak yine de bazen yararlıdır).