作者ericinttu (~ ~ ~)
看板AndroidDev
标题[问题] OpenGL绘图後 可再叠上其他Android元件吗?
时间Sun Sep 18 01:30:01 2011
由於 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)
1F:→ bleed1979:StackOverflow上的做法是把文字讯息的那两块放图片。 09/18 14:45
2F:→ bleed1979:把字写在图片上,再把图片放到素材上。 09/18 14:46
3F:→ bleed1979:我来实作看看,有困难再回报,如成功贴源码。 09/18 14:46
4F:→ bleed1979:使用上面提到的方法失败了,不过目前在研究spritetext 09/18 22:37
5F:→ qrtt1:opengl 画的快的同时,它 Thread 占用系统资源很多。 09/18 23:24
6F:→ qrtt1:如果你是做 Game 那就无妨,应该就让 opengl 全力跑 09/18 23:24
7F:→ qrtt1:update state 其实不太需要到 cpu resource。 09/18 23:24
8F:→ qrtt1:而效能是整体的感觉,要注意会不会被render thread拖慢其他 09/18 23:27
9F:→ qrtt1:的部分给使用者的感觉。 09/18 23:27
先感谢 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)