Android自定义视图中的可变大小

时间:2012-10-02 21:47:16

标签: java android android-layout graphics

我正在实现自定义视图,我希望能够在运行时更改它的大小。

简化问题:我需要在此视图中显示一个位图,但由于经常刷新,我想扩展SurfaceView。

问题是我丢失了ImageView的自动调整大小功能。

所以我想声明一个方法setCustomBitmap(Bitmap bmp)并根据该位图的宽度和高度(保持纵横比)调整大小(在此时或下次显示视图时)视图尺寸。

我应该使用什么方法?我想setWidth()和setHeight()不是最好的主意

1 个答案:

答案 0 :(得分:2)

由于您正在扩展SurfaceView,因此您可以覆盖onMeasure()方法。传递给超类的MeasureSpec实例(通过super.onMeasure())将确定SurfaceView的大小。您可以使用位图的尺寸来制作每个MeasureSpec。

例如:

protected void onMeasure( int widthMeasureSpec, int heightMeasureSpec ) {
    int parentViewWidth = MeasureSpec.getSize( widthMeasureSpec );
    int parentViewHeight = MeasureSpec.getSize( heightMeasureSpec );
    // ... take into account the parent's size as needed ...
    super.onMeasure(
        MeasureSpec.makeMeasureSpec( bitmap.width(), MeasureSpec.EXACTLY ), 
        MeasureSpec.makeMeasureSpec( bitmap.height(), MeasureSpec.EXACTLY ) );
}