如何从重写的setImageBitmap()获取ImageView的大小

时间:2014-03-27 06:51:40

标签: java android bitmap imageview override

我有一个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()。似乎没有做任何事情。

2 个答案:

答案 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()

方法。观点类。

感谢名单