2012-07-20 69 views
0

我增加了cameraView,一個glSurfaceView,並在爲了一個ImageViewrelativeLayout,但結果他們從頂部下到上排序(cameraViewimageViewglSurfaceView)任何具體的原因是什麼?是因爲glSurfaceView重新繪製它自己的內部?addView爲了不工作

代碼片段爲加法:

rel.addView(glView);

 RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); 
     params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM,1); 
     params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
     params.rightMargin = 20; 
     // add Camera to view 
     rel.addView(camPreview, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 
     rel.addView(glView); 
     rel.addView(imageView,params); 

問題真的是..我怎麼能保證ImageView的是總在最前面

我認爲GLSurfaceView's 方法使GlSurfaceView到視圖列表的頂部,所以我說一個電話回從onDrawFrame方法在mainActivity的公共方法,看起來像這樣:

public void ajustOverlay(){ 
     imageView.bringToFront(); 
     Log.v("parent: ", "ajust overlay"); 
    } 

這似乎仍不保持imageView之上

+0

也許您可以使用視圖層次結構工具? – 2012-07-20 22:23:07

回答

0

好吧,我ifnally有工作..關鍵:

所以這應該爲你工作在添加glView之前添加以下行:

glView.setZOrderMediaOverlay(true); 
rel.addView(camPreview, camParams); 
rel.addView(glView, glParams); 
rel.addView(imageView, imageParams); 
2

你將你的看法,並沒有一個足夠RelativeLayout的規則,這也許是原因,結果不是你所期望的。 例如,必須定義RelativeLayout.BELOW規則以確保視圖低於另一個視圖。

首先,你應該嘗試在XML建立自己的佈局,你就可以看看在Eclipse上的結果。 然後以編程方式應用文件中的所有規則或輕鬆構建XML層次結構,這要歸功於LayoutInflater。 我真的建議你LayoutInflater解決方案,如果你可以,由於許多原因(維護,重新格式化,多屏幕處理,...)。

你也應該閱讀有關的RelativeLayout完整的文檔,以正確格式化:here

+0

RelativeLayout.BELOW將一個視圖,底部對齊到另一個正確的頂部?多數民衆贊成那不是我想要做的,我試圖覆蓋另一個視圖 – erik 2012-07-21 13:33:43

+0

好,所以'RelativeLayout'應該適合您的情況。你還是可以使用'LayoutInflater'來實現你的視圖嗎? – 2012-07-21 13:42:26

+0

我沒有使用layoutInflater,因爲沒有現有的xml佈局。 – erik 2012-07-21 13:48:20

2

我遇到了相同的排序問題,試圖通過側三個常規LinearLayout對象側放置在父RelativeLayout。要解決該問題,只需在調用addView方法時添加一個參數即可。它是三的第二個參數,它代表您希望添加視圖的順序的索引。嘗試解決上述和其他各種解決方案,現在敲我的頭撞在水泥將近一年後

rel.addView(camPreview, 0, camParams); 
rel.addView(glView, 1, glParams); 
rel.addView(imageView,2, imageParams);