2010-10-02 30 views
5

Tôi có một GLSurfaceView với đối tượng vẽ được như nền, tuy nhiên chỉ có nền là có thể nhìn thấy khi trả lại mà không surfaceView.setZOrderOnTop (true)Android GLSurfaceView với nền drawable

tôi cần phải tránh sử dụng setZOrderOnTop (true) vì có tĩnh TextView đang được sử dụng trên đầu trang của GLSurfaceView.

Bất kỳ đề xuất nào để việc này hoạt động?

Trả lời

9

GLSurfaceView có thể không thực sự có một nền tảng . Cách mà một giao diện bề mặt hoạt động là cắt lỗ thông qua cửa sổ Hoạt động của bạn và hiển thị một bề mặt khác phía sau. Đặt setZOrderOnTop (true) di chuyển bề mặt phía trên cửa sổ Activity.

+0

Cảm ơn bạn đã rất hữu ích! Có cách nào bạn có thể đề xuất để đạt được những gì tôi cần: hình nền tĩnh -> nội dung 3d -> nút xem bổ sung trên đầu hoặc là cách duy nhất để hiển thị nền tĩnh dưới dạng kết cấu trên đa giác? – Jlam

+1

Tôi đã kết thúc chỉ vẽ nền trên một đa giác đằng sau tất cả mọi thứ khác .. cảm ơn cho các tip! – Jlam

1

Vâng, kể từ GLSurfaceView chỉ là một cái nhìn, tại sao không sử dụng một FrameLayout đặt GLSurfaceView trên đầu trang của ImageView (hoặc bất cứ điều gì bạn đang sử dụng để hiển thị các drawable.)

+0

Mệt mỏi nhưng không hoạt động vì các điều kiện sau: 1. Lớp gl có hình nền không đổi. 2. có các yếu tố bổ sung trên đỉnh của lớp gl chẳng hạn như nút vv. Không thể đặt hình ảnh tĩnh làm nền trên lớp gl vì nội dung 3d thực tế sẽ không hiển thị trừ khi tôi đặtZOrderOnTop (true) trên lớp gl. Nhưng nếu tôi làm điều đó thì các yếu tố bổ sung sẽ kết thúc dưới lớp gl. – Jlam

6

sai! Bạn có thể làm được. Chỉ là một ví dụ để cho biết cách hoạt động của nó.

glRenderer = new OpenGLRenderer(context); 
view = new GLSurfaceView(context); 
view.setEGLConfigChooser(8, 8, 8, 8, 16, 0); 
view.setRenderer(glRenderer); 
view.getHolder().setFormat(PixelFormat.RGBA_8888); 
view.getHolder().setFormat(PixelFormat.TRANSLUCENT); 
view.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY); 

Sau đó, sử dụng framelayout để đặt chế độ xem dưới glsurfaceview!

+0

Cảm ơn. Nó làm cho hậu duệ GLSurfaceView của tôi trong suốt. Nhưng thực tế REDERMODE_CONTINUOUSLY là giá trị mặc định và cho tôi thêm dòng cuối cùng gặp sự cố ứng dụng. –

+1

Đó là bởi vì bạn phải setRenderMode trước khi view.setRenderer –

+0

những gì để đặt trong FrameLayout để giữ các khung nhìn khác trên GLsurfaceView? –

2

Hãy thử setZOrderMediaOverlay (đúng); nên đặt lớp gl phía trên nền nhưng bên dưới cửa sổ.

Các vấn đề liên quan