Я не знаю, читает ли кто-нибудь эту ветку или нет, но решение Джеффа приведет вас только на полпути (в буквальном смысле). То, что сделает его 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
(что устарело, но иногда полезно).