2014-11-23 64 views
1

我以編程方式在Android中生成視圖。父視圖是RelativeLayout,我將動態添加子視圖(例如,TextViewImageView)。以編程方式生成視圖並捕獲位圖

如果我將視圖添加到我的活動的主視圖,那麼它顯示正常(就像預期的那樣)。使用此代碼。

LinearLayout mainView = (LinearLayout)findViewById(R.id.mainView); 
mainView.addView(dynamicallyGeneratedView); 

我不想添加視圖作爲子視圖,但我只是想把它變成一個位圖。所以我做了以下幾點:

view.measure(View.MeasureSpec.UNSPECIFIED,View.MeasureSpec.UNSPECIFIED); 
Bitmap b = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888); 
Canvas c = new Canvas(b); 
view.draw(c); 

但是,當我將此位圖添加到ImageView它不顯示任何內容。

我在做什麼錯?我想生成一個視圖,把它變成一個位圖,但是而不是顯示在屏幕上。

任何幫助,將不勝感激。

回答

2

那麼,你肯定沒有在measure()之後致電layout(),這裏需要AFAIK。

無論你是否可以脫身View.MeasureSpec.UNSPECIFIED以及諸如getMeasuredWidth()之類的東西,我都不能說,因爲我還沒有嘗試過。每當我有手動測量奠定了View,我一直用實際尺寸,如:

root=inflater.inflate(R.layout.add, null); 
root.measure(800, 480); 
root.layout(0, 0, 800, 480); 

如果您Bitmap目前有一個有用的大小,只是沒有任何內容,嘗試layout()與大小然後再繪製到Canvas。如果您的Bitmap因某種不太有用的尺寸而損壞(例如,其中一個或兩個尺寸都爲0),則可能需要指定實際尺寸,而不是執行UNSPECIFIED

+0

好,所以有點工作,謝謝(我現在可以看到一個圖像),但不幸的是它沒有在位圖中佈置子視圖,就像直接將視圖添加爲子視圖一樣。有沒有辦法讓視圖認爲它被添加爲活動視圖的子視圖而不實際添加它? – 2014-11-23 16:09:22

+0

@ThomasClayson:不是我所知道的。然而,有一個'RelativeLayout'的根可能是你的問題。嘗試將其封裝在其他某個東西(例如'FrameLayout')或切換到不同於'RelativeLayout'的不同容器類。 'RelativeLayout'只在知道它的父親時纔有效,在你的情況下,它沒有父親。 – CommonsWare 2014-11-23 16:12:34

+0

完美。我添加了一個額外的FrameLayout作爲我的RelativeLayout的父視圖,它現在正在工作!非常感謝你。 – 2014-11-23 16:36:31