我有一个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()
。似乎什么也没做。 最佳答案
您应该使用
OnMesure()
方法。视图类。
谢谢