【发布时间】:2014-03-27 06:51:39
【问题描述】:
我有一个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() 而无需两次应用位图?
编辑:还尝试从覆盖的setImageBitmap() 调用requestLayout()。好像什么都没做。
【问题讨论】:
-
试过 requestLayout 了吗?
-
@pskink:刚刚,是的。问题已编辑。
-
顺便说一句,你想达到什么目的?也许有更短的轨道?
-
你应该试试 View 类的 onMeasure 方法。我希望它有所帮助。
-
位图通过
drawBitmapMesh()绘制得到3D翻页效果。由于图像可能是不同的形状,因此需要将它们填充到相同的纵横比,以防止在应用于网格时拉伸。
标签: java android bitmap imageview overriding