2013-02-19 57 views
0

我想創建一個位圖從我以編程方式創建的相對佈局。 的Realtivelayout正顯示出如預期,但是當我嘗試創建一個位圖,它返回非法參數異常的高度和寬度必須> 0 我這是怎麼做使用相對佈局返回一個位圖返回illegalargumentexception

Bitmap.createBitmap(saveLayout.getWidth(), 
      saveLayout.getHeight(), Bitmap.Config.ARGB_8888); 

任何指針?

編輯:添加此代碼,也:

ViewTreeObserver viewTreeObserver = saveLayout.getViewTreeObserver(); 
    if (viewTreeObserver.isAlive()) { 
     viewTreeObserver 
       .addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
        @Override 
        public void onGlobalLayout() { 
         saveLayout.getViewTreeObserver() 
           .removeGlobalOnLayoutListener(this); 
         viewWidth = saveLayout.getWidth(); 
         viewHeight = saveLayout.getHeight(); 

        } 
       }); 
    } 

在上面給出的代碼onGlobalLayout()也似乎從來沒有被調用。

回答

1

如果您以編程方式創建saveLayout,您可能會詢問其寬度和高度太早。 (只是一個受過教育的猜測,因爲我看不到你的代碼的其餘部分)

See this explanation

The reason why that createBitmap() call throws that exception is:

如果寬度或高度是< = 0

所以,儘量推遲創建Bitmap直到之後出現視圖,或者查找另一種計算寬度/高度的方法。

This question has a few options/answers for how to defer this calculation to avoid 0 results

+0

嘿,感謝您的幫助 我現在想使用此代碼來獲取寬度和高度 ViewTreeObserver viewTreeObserver = saveLayout.getViewTreeObserver(); \t \t如果(viewTreeObserver.isAlive()){ \t \t \t viewTreeObserver \t \t \t \t \t .addOnGlobalLayoutListener(新OnGlobalLayoutListener(){ \t \t \t \t \t \t @覆蓋 \t \t \t \t \t \t公共無效onGlobalLayout (){ \t \t \t \t \t \t \t saveLayout.getViewTreeObserver() \t \t \t \t \t \t \t \t \t .removeGlobalOnLayoutListener(本); \t \t \t \t \t \t \t viewWidth = saveLayout.getWidth(); \t \t \t \t \t \t \t viewHeight = saveLayout。的getHeight(); \t \t \t \t \t \t} \t \t \t \t \t}); 但是在全局佈局上似乎沒有被調用,你能說出原因嗎? – 2013-02-19 02:03:20

+0

請在上面的**問題**中發佈其他代碼(使用下方的**編輯**鏈接),並將其格式化爲代碼。閱讀您剛纔發佈的內容真的很難。謝謝。 – Nate 2013-02-19 02:05:14

+0

問題編輯:) – 2013-02-19 02:08:47