編輯:關於Android編程
其實,我個人學習Android最主要的目的是學習在此平台下的3D效果的開發。所以,我們開始進入主題吧。
OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三維圖形 API 的子集,針對手機、PDA和游戲主機等嵌入式設備而設計。
該API由Khronos集團定義推廣,Khronos是一個圖形軟硬件行業協會,該協會主要關注圖形和多媒體方面的開放標准。
在Android中搭建一個3D開發的基本框架:
一、導入opengl es庫:
[java]
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
二、加入渲染支持:
在Android中,GLSurfaceView包含了一個專門用於渲染3D的接口Renderer,來顯示OpenGL視圖:
1、導入支持庫:
[java]
import android.opengl.GLSurfaceView;
import android.opengl.GLSurfaceView.Renderer;
import android.opengl.GLSurfaceView;
import android.opengl.GLSurfaceView.Renderer;
2、創建一個GLRender類實現Renderer接口:
[java] view plaincopyprint?public class GLRender implements Renderer
{
}
public class GLRender implements Renderer
{
}
3、實現GLRender類中的3個抽象方法:
[java]
public void onDrawFrame(GL10 gl)
public void onSurfaceChanged(GL10 gl, int width, int height)
public void onSurfaceCreated(GL10 gl, EGLConfig config)
public void onDrawFrame(GL10 gl)
public void onSurfaceChanged(GL10 gl, int width, int height)
public void onSurfaceCreated(GL10 gl, EGLConfig config)
① onSurfaceCreated 在窗口被創建時被調用,需要做一些必要的初始化工作:
[java] view plaincopyprint?public void onSurfaceCreated(GL10 gl, EGLConfig config)
{
// 啟用陰影平滑
gl.glShadeModel(GL10.GL_SMOOTH);
// 黑色背景,設置清除屏幕時所用的顏色-->> (R, G, B, A) 取值: 0.0f-1.0f 。
gl.glClearColor(0, 0, 0, 0);
// 設置深度緩存 -->> 決定哪個物體先畫。
gl.glClearDepthf(1.0f);
// 啟用深度測試
gl.glEnable(GL10.GL_DEPTH_TEST);
// 所作深度測試的類型
gl.glDepthFunc(GL10.GL_LEQUAL);
// 告訴系統對透視進行修正
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
}
public void onSurfaceCreated(GL10 gl, EGLConfig config)
{
// 啟用陰影平滑
gl.glShadeModel(GL10.GL_SMOOTH);
// 黑色背景,設置清除屏幕時所用的顏色-->> (R, G, B, A) 取值: 0.0f-1.0f 。
gl.glClearColor(0, 0, 0, 0);
// 設置深度緩存 -->> 決定哪個物體先畫。
gl.glClearDepthf(1.0f);
// 啟用深度測試
gl.glEnable(GL10.GL_DEPTH_TEST);
// 所作深度測試的類型
gl.glDepthFunc(GL10.GL_LEQUAL);
// 告訴系統對透視進行修正
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
} ②onSurfaceChanged 當窗口大小發生改變時被調用,不管窗口的大小是否已經改變,在程序開始時至少運行一次。
在這個裡面,我們要設置OpenGL的場景大小:
[java]
public void onSurfaceChanged(GL10 gl, int width, int height)
{
float ratio = (float) width / height;
//設置OpenGL場景的大小
gl.glViewport(0, 0, width, height);
//設置投影矩陣 -->> 增加透視.
gl.glMatrixMode(GL10.GL_PROJECTION);
//重置投影矩陣 -->> 恢復成原始狀態.
gl.glLoadIdentity();
// 設置視口的大小 -->> 前4個參數確定窗口的大小,後2個參數分別是在場景中所能繪制深度的起點和終點。
gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);
// 選擇模型觀察矩陣
gl.glMatrixMode(GL10.GL_MODELVIEW);
// 重置模型觀察矩陣
gl.glLoadIdentity();
}
public void onSurfaceChanged(GL10 gl, int width, int height)
{
float ratio = (float) width / height;
//設置OpenGL場景的大小
gl.glViewport(0, 0, width, height);
//設置投影矩陣 -->> 增加透視.
gl.glMatrixMode(GL10.GL_PROJECTION);
//重置投影矩陣 -->> 恢復成原始狀態.
gl.glLoadIdentity();
// 設置視口的大小 -->> 前4個參數確定窗口的大小,後2個參數分別是在場景中所能繪制深度的起點和終點。
gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);
// 選擇模型觀察矩陣
gl.glMatrixMode(GL10.GL_MODELVIEW);
// 重置模型觀察矩陣
gl.glLoadIdentity();
}③onDrawFrame 在窗口內進行繪圖操作。 在繪圖之前,需要將屏幕清楚成前面指定的顏色,清楚深度緩存並且重置場景,
然後就可以繪圖了:
[java]
public void onDrawFrame(GL10 gl)
{
// 清除屏幕和深度緩存
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
// 重置當前的模型觀察矩陣
gl.glLoadIdentity();
// 具體的繪圖操作開始 。。。
}
public void onDrawFrame(GL10 gl)
{
// 清除屏幕和深度緩存
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
// 重置當前的模型觀察矩陣
gl.glLoadIdentity();
// 具體的繪圖操作開始 。。。
}
三、在主程序調用我們寫好的接口:
調用GLSurfaceView類的setRenderer方法將我們自己構建的GLRender類設置為默認的Renderer,
然後,通過setContentView方法使Activity顯示一個GLSurfaceView即可。
[java]
Renderer render = new GLRender();
GLSurfaceView glView = new GLSurfaceView(this);
glView.setRenderer(render);
setContentView(glView);
Renderer render = new GLRender();
GLSurfaceView glView = new GLSurfaceView(this);
glView.setRenderer(render);
setContentView(glView);
到這裡,我們的基本框架就搭建好了。
在輸入框中輸入我們想要輸入的信息就會出現其他與其相關的提示信息,這種效果在Android中是用AutoCompleteTextView實現的。AutoCompleteTe
要想實現android手機通過掃描名片,得到名片信息,可以使用脈可尋提供的第三方SDK,即Maketion ScanCard SDK,脈可尋雲名片識別服務。他們的官方網站
照片牆這種功能現在應該算是挺常見了,在很多應用中你都可以經常看到照片牆的身影。它的設計思路其實也非常簡單,用一個GridView控件當作“牆”,然
Android其中最重要的特性之一,就是一個應用可以基於“action”來切換到另一個應用。比如,你的應用想要查找地方,在地圖上顯示。但是不一定要