【问题标题】:How can I get the size of an ImageView from overridden setImageBitmap()如何从覆盖的 setImageBitmap() 获取 ImageView 的大小
【发布时间】: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


【解决方案1】:

你想使用

OnMesure()

方法。视图类。

感谢

【讨论】:

    【解决方案2】:
    //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;
    

    【讨论】:

      猜你喜欢
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多