Я не знаю, чи все ще хтось читає цю тему чи ні, але рішення Джеффа отримає вас лише на півдорозі (начебто буквально). Що він буде робити onMeasure - це показати половину зображення в половині батьківського. Проблема полягає в тому, що зателефонувавши до super.onMeasure перед setMeasuredDimensionзаповітом, буде виміряти всіх дітей у представленні даних на основі вихідного розміру, а потім просто скоротити подання навпіл, коли setMeasuredDimensionрозмір буде змінено.
Натомість вам потрібно зателефонувати setMeasuredDimension(як це потрібно для переопрацювання onMeasure) та надати нове LayoutParamsдля перегляду, а потім зателефонувати super.onMeasure. Пам'ятайте, що LayoutParamsвони походять від типу батьківського перегляду, а не типу вашого перегляду.
@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);
}
Я вважаю, що єдиний раз, коли у вас виникнуть проблеми з батьком, LayoutParamsце якщо батько є AbsoluteLayout(що застаріло, але все ще іноді корисно).