我有一个ImageView
的子类覆盖setImageBitmap()
来拦截给定的位图并填充它以适应视图的宽高比。为此,我需要知道视图的大小,但getWidth()
和getHeight()
都会在setImageBitmap()
期间返回0。
在看到使用正确尺寸调用onSizeChanged()
后,我尝试将处理延迟到那时:
private Bitmap pending_bitmap;
@Override public void setImageBitmap( Bitmap b ) {
if ( getWidth() == 0 || getHeight() == 0 ) pending_bitmap = b;
else applyBitmap( b );
}
@Override public void onSizeChanged( int w, int h, int old_w, int old_h ) {
if ( pending_bitmap != null ) {
applyBitmap( pending_bitmap );
pending_bitmap = null;
}
}
private void applyBitmap( b ) {
// Do some stuff that needs getWidth() and getHeight()
super.setImageBitmap( b );
}
但是,现在onSizeChanged()
未被调用,因为setImageBitmap()
期间没有变化。
我尝试将null
传递给super.setImageBitmap()
以强制调整大小,但都无济于事。有没有我可以获取pending_bitmap
进行处理的地方,或者某种方式我可以在不应用位图两次的情况下强制调用onSizeChanged()
?
编辑:还尝试从被覆盖的requestLayout()
调用setImageBitmap()
。似乎没有做任何事情。
答案 0 :(得分:0)
//when declaring vars
LinearLayout yourlayout;
//in oncreate
LinearLayout yourlayout=(LinearLayout) findViewById(R.id.yourlayoutid);
//on size changed
LayoutParams getlay =yourlayout.getLayoutParams();
height =getlay.height;
width=getlay.width;
答案 1 :(得分:0)
您想要使用
OnMesure()
方法。观点类。
感谢名单