Tôi không biết liệu có ai vẫn đang đọc chủ đề này hay không, nhưng giải pháp của Jeff sẽ chỉ giúp bạn đạt được nửa chặng đường (nghĩa đen). Những gì onMeasure của anh ấy sẽ làm là hiển thị một nửa hình ảnh trong một nửa hình ảnh cha mẹ. Vấn đề là việc gọi super.onMeasure trước setMeasuredDimension
sẽ đo lường tất cả các phần tử con trong chế độ xem dựa trên kích thước ban đầu, sau đó chỉ cần cắt chế độ xem làm đôi khi setMeasuredDimension
thay đổi kích thước.
Thay vào đó, bạn cần gọi setMeasuredDimension
(theo yêu cầu đối với ghi đè onMeasure) và cung cấp thông tin mới LayoutParams
cho chế độ xem của bạn, sau đó gọi super.onMeasure
. Hãy nhớ rằng, của bạn LayoutParams
có nguồn gốc từ loại chính của chế độ xem của bạn, không phải loại của chế độ xem của bạ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);
}
Tôi tin rằng lần duy nhất bạn gặp vấn đề với cha mẹ LayoutParams
là khi cha mẹ là một AbsoluteLayout
(không được dùng nữa nhưng đôi khi vẫn hữu ích).