2012-10-02 84 views
1

我正在實現自定義視圖,並希望能夠在運行時更改它的大小。自定義視圖中的可變大小Android

簡化問題:我需要在此視圖中顯示一個位圖,但由於它經常刷新,我想擴展SurfaceView。

問題是我失去了ImageView的自動調整大小功能。

所以我想聲明一個方法setCustomBitmap(Bitmap bmp)並根據該位圖的寬度和高度(保持寬高比)調整視圖尺寸(在此刻或下次顯示視圖時)。

我應該使用什麼方法?我想象setWidth()和setHeight()不是最好的想法

回答

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)); 
}