[問題] OpenGL繪圖後 可再疊上其他Android元件嗎?

看板AndroidDev作者 (~ ~ ~)時間13年前 (2011/09/18 01:30), 編輯推噓0(009)
留言9則, 2人參與, 最新討論串1/1
由於 OpenGL 繪圖功能部份較快一點 所以這部份不打算再換回去 Android 本身提供的 bitmap/canvas 繪圖功能了 但是一些文字或資訊要顯示在畫面上 用 OpenGL 就有點不好上手 於是就想到是否可以用 OpenGL 畫出的東西當底圖 再加上 Android 提供的一些基本元件(Button/TextView/EditText/...) 來完成我想要做到的畫面效果? 構圖如下 ┌────────────┐ │ 這裡放文字訊息 │ ├────────────┤ │ │ │ │ │ │ │ │ │ │ │這裡是OpenGL有圖的區域 │ │ │ │ │ │ │ │ │ ├────────────┤ │ 這裡也是放文字訊息 │ └────────────┘ 然後 一般看到的 OpenGL 程式 都是在第一個呼叫的 Activity 裡的 onCreate() 設定畫面內容為GLSurfaceView 就像下面這段程式 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); glSurface = new GLSurfaceView(this); glSurface.setRenderer(xxx); setContentView(glSurface); } 有沒有辦法 在 setContentView(glSurface) 之後 再疊上 layout檔案裡的 main.xml 設定好的畫面呢? 感謝回答. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.117.126.243 ※ 編輯: ericinttu 來自: 59.117.126.243 (09/18 01:32)

09/18 14:45, , 1F
StackOverflow上的做法是把文字訊息的那兩塊放圖片。
09/18 14:45, 1F

09/18 14:46, , 2F
把字寫在圖片上,再把圖片放到素材上。
09/18 14:46, 2F

09/18 14:46, , 3F
我來實作看看,有困難再回報,如成功貼源碼。
09/18 14:46, 3F

09/18 22:37, , 4F
使用上面提到的方法失敗了,不過目前在研究spritetext
09/18 22:37, 4F

09/18 23:24, , 5F
opengl 畫的快的同時,它 Thread 佔用系統資源很多。
09/18 23:24, 5F

09/18 23:24, , 6F
如果你是做 Game 那就無妨,應該就讓 opengl 全力跑
09/18 23:24, 6F

09/18 23:24, , 7F
update state 其實不太需要到 cpu resource。
09/18 23:24, 7F

09/18 23:27, , 8F
而效能是整體的感覺,要注意會不會被render thread拖慢其他
09/18 23:27, 8F

09/18 23:27, , 9F
的部分給使用者的感覺。
09/18 23:27, 9F
先感謝 badwork 給的一些提示線索 可以用出來了 我的做法是 layout 部份是採用 FrameLayout - FrameLayout (要放全螢幕畫面的 OpenGL, 取個名字叫 fl_opengl) (雖是全螢幕的, 但要畫的圖是在中間的正方形那一塊, 所以才會想要用這樣的 layout) - LinearLayout (放最上面的文字輸出,可能會用到兩三排所以用Linear方式 - RelativeLayout (放最下面的文字或按鈕,為了置底所以用Relative方式) 先把 main.xml 定義好, 再來寫 activity 部份. // class 裡的屬性 private GLSurfaceView glSurface; FrameLayout fl_opengl; @Override protected void onCreate(Bundle savedInstanceState) { // 先跟平常的 android app 一樣, // 有 onCreate() 跟 setContent(R.layout.main) super.onCreate(savedInstanceState); setContentView(R.layout.main); // 取得要放 OpenGL 畫面的 FrameLayout-View fl_opengl = (FrameLayout)findViewById(R.id.fl_opengl); // 執行OpenGL動作, 再把 OpenGL Surface View 連接到 fl_opengl glSurface = new GLSurfaceView(this); glSurface.setRenderer(xxx); fl_opengl.addView(glSurface); } ※ 編輯: ericinttu 來自: 59.117.117.181 (09/19 06:19)
文章代碼(AID): #1ETDaSUK (AndroidDev)
文章代碼(AID): #1ETDaSUK (AndroidDev)