我有一个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()


方法。视图类。

谢谢

09-28 02:14