編輯:關於Android編程
原文地址:http://android.xsoftlab.net/training/graphics/opengl/index.html
Android framework層為創建絢麗的功能性UI提供了大量的標准工具。然而,如果想要以更多方式來控制屏幕的繪制,或者在三維圖形中繪制,那麼就需要使用其它工具了。Android framework所提供的OpenGL ES API為我們提供了一系列的工具,這些工具可以用來顯示一些高端大氣、天馬行空的圖形,只要你能想得到,那麼它就可以做得到。此外,它還得益於很多設備所提供的GPU加速功能。
這節課會討論OpenGL的開發基礎:包括設置環境、繪制對象、移動繪制元素及響應觸摸事件。
在接下來的示例代碼中使用了OpenGL ES 2.0 API,該版本在當前的Android設備上推薦使用。有關更多OpenGL ES的版本信息,請參見OpenGL開發指南。
Note: 注意不要將OpenGL ES 1.x API與OpenGL ES 2.0 API相混淆!這兩個版本的API之間不可交換使用,如果要使用的話,那麼只有一個結果,就是悲劇。
為了能在Android應用中使用OpenGL ES,必須給OpenGL ES要繪制的圖形區域創建一個View容器。其中一種實現方法就是實現GLSurfaceView及GLSurfaceView.Renderer。其中GLSurfaceView是在OpenGL中繪制圖形的View容器。GLSurfaceView.Renderer用於控制應該在剛才的View中繪制什麼。有關更多這些類的信息,請參見OpenGL ES開發指南。
GLSurfaceView是將OpenGL ES整合到應用中的唯一途徑。對於全屏或者接近全屏的圖形View,GLSurfaceView是最合適的選擇。開發者如果需要將OpenGL ES整合到一小塊區域上,應該使用TextureView。除此之外還可以使用SurfaceView,不過這可能需要相當多的代碼才能實現。
這節課將會展示以最省的代碼來實現GLSurfaceView及GLSurfaceView.Renderer。
為了可以使用OpenGL ES 2.0 API,需要在清單文件中添加如下聲明:
如果應用用到了紋理壓縮的功能,那麼還需要聲明應用所使用到的壓縮格式,這樣的話,應用只能被安裝在支持的設備上。
有關更多紋理壓縮格式的相關信息,請參見OpenGL開發指南。
與普通的應用相同,OpenGL ES也同樣需要用戶界面。主要的不同在於普通的應用只需要將布局放入Activity就可以。在使用OpenGL ES的應用中,除了使用普通的TextView這類基本控件之外,還需要添加GLSurfaceView。
下面這段代碼展示了使用GLSurfaceView的最基本實現:
public class OpenGLES20Activity extends Activity {
private GLSurfaceView mGLView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Create a GLSurfaceView instance and set it
// as the ContentView for this Activity.
mGLView = new MyGLSurfaceView(this);
setContentView(mGLView);
}
}
Note: OpenGL ES 2.0需要在Android 2.2及以上的版本上才能運行,請確保應用程序的最低版本在此之上。
GLSurfaceView是一塊特殊的區域,它可以用戶繪制OpenGL ES圖形。它本身不需要做太多事情。實際上,圖形的繪制是由GLSurfaceView.Renderer來控制的。事實上,你可能想要試著不去繼承這個類,而是直接創建一個原生的GLSurfaceView實例,不要這麼去做。你需要繼承這個類來捕獲觸摸事件,相關信息在Responding to Touch Events課程中有涉及到。
本質上GLSurfaceView的代碼是很少的,所以為了快速去實現它,常見的做法是在使用這個對象的Activity中創建一個內部類:
class MyGLSurfaceView extends GLSurfaceView {
private final MyGLRenderer mRenderer;
public MyGLSurfaceView(Context context){
super(context);
// Create an OpenGL ES 2.0 context
setEGLContextClientVersion(2);
mRenderer = new MyGLRenderer();
// Set the Renderer for drawing on the GLSurfaceView
setRenderer(mRenderer);
}
}
對GLSurfaceView的其它附加選項就是設置其渲染模式:
// Render the view only when there is a change in the drawing data
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
這個選項阻止了GLSurfaceView框架的重新繪制,直到requestRender()方法被調用。這可以提高應用的效率。
類GLSurfaceView.Renderer是真正有意思的地方。這個類可以控制在GLSurfaceView上所繪制的事物。它內部有3個方法,這3個方法由Android系統調用,用於計算如何在GLSurfaceView上進行繪制:
onSurfaceCreated()在設置OpenGL ES環境的時候調用一次。 onDrawFrame() view的每次繪制都會調用。 onSurfaceChanged() 在view的結構發生改變的時候進行調用,比如設備的屏幕方向發生了變化。下面是OpenGL ES渲染器的最基本實現,這裡只是在GLSurfaceView簡單繪制了一個黑色的背景:
public class MyGLRenderer implements GLSurfaceView.Renderer {
public void onSurfaceCreated(GL10 unused, EGLConfig config) {
// Set the background frame color
GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
}
public void onDrawFrame(GL10 unused) {
// Redraw background color
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
}
public void onSurfaceChanged(GL10 unused, int width, int height) {
GLES20.glViewport(0, 0, width, height);
}
}
上面就是要做的所有工作了。上面的代碼使用OpenGL繪制了一個黑色的背景。雖然這些代碼並沒有做什麼有意思的事情,但是通過創建這些類,你就可以為通過OpenGL繪制圖形打下了基礎。
Note: 你可能會懷疑,在使用OpengGL ES 2.0 API時,為什麼這些方法都會有個名叫GL10的參數。這些在2.0 API中重復使用到的簽名方法是為了保持Android framework的代碼簡便。
如果你對OpenGL ES API很熟悉,你現在就可以設置OpenGL ES的環境並著手繪制圖形了。無論如何,如果你想獲取更多有關OpenGL的入門幫助,可以查看下節上部分的一些小提示。
繪制棋盤面板:MainActivity.javapackage com.xbmu.wuziqi;import android.support.v7.app.AppComp
1.使用ServerSocket創建TCP服務器端 Java中能接收其他通信實體連接請求的類是ServerSocket, ServerSocket對象用於監聽來 自客戶
前段時間在項目開發中,有listview實現單選和多選的效果,特別是listview的單選效果,一開始項目比較緊,自己考慮的是用listview和radionbutton
1、Kotlin介紹 [Kotlin](https://kotlinlang.org/) Kotlin是一門基於JVM的編程語言,它正成長為Android開發中用於替代J