ฉันไม่รู้ว่ายังมีใครอ่านกระทู้นี้อยู่หรือเปล่า แต่วิธีแก้ปัญหาของเจฟฟ์จะทำให้คุณไปถึงที่นั่นได้แค่ครึ่งเดียว (ตามตัวอักษร) สิ่งที่ 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
(ซึ่งเลิกใช้งานแล้ว แต่บางครั้งก็ยังมีประโยชน์)