import javax.microedition.khronos.egl.EGLConfig;import javax.microedition.khronos.opengles.GL10;import android.app.Activity;import android.content.Context;import android.opengl.GLSurfaceView;import android.os.Bundle;import android.view.MotionEvent;/** * 本示例演示OpenGL ES开发3D应用 * 该Activity使用了自定义的GLSurfaceView的子类 * 这样,我们可以开发出和用户交互的应用,比如游戏等。 * 需要注意的是:由于渲染对象是运行在一个独立的渲染线程中,所以 * 需要采用跨线程的机制来进行事件的处理。但是Android提供了一个简便的方法 * 我们只需要在事件处理中使用queueEvent(Runnable)就可以了. *  * 对于大多数3D应用,如游戏、模拟等都是持续性渲染,但对于反应式应用来说,只有等用户进行了某个操作后再开始渲染。 * GLSurfaceView支持这两种模式。通过调用方法setRenderMode()方法设置。 * 调用requestRender()继续渲染。 *  *  * @author Administrator * */public class InteractiveDemo extends Activity {  private GLSurfaceView mGLView;  public void onCreate(Bundle savedInstanceState){  super.onCreate(savedInstanceState);  mGLView = new DemoGLSurfaceView(this); //这里使用的是自定义的GLSurfaceView的子类  setContentView(mGLView); }   public void onPause(){  super.onPause();  mGLView.onPause(); }  public void onResume(){  super.onResume();  mGLView.onResume(); }}class DemoGLSurfaceView extends GLSurfaceView{ DemoRenderer2 mRenderer;  public DemoGLSurfaceView(Context context) {  super(context);  //为了可以激活log和错误检查,帮助调试3D应用,需要调用setDebugFlags()。  this.setDebugFlags(DEBUG_CHECK_GL_ERROR|DEBUG_LOG_GL_CALLS);  mRenderer = new DemoRenderer2();  this.setRenderer(mRenderer); }  public boolean onTouchEvent(final MotionEvent event){  //由于DemoRenderer2对象运行在另一个线程中,这里采用跨线程的机制进行处理。使用queueEvent方法  //当然也可以使用其他像Synchronized来进行UI线程和渲染线程进行通信。  this.queueEvent(new Runnable() {      @Override   public void run() {        //TODO:    mRenderer.setColor(event.getX()/getWidth(), event.getY()/getHeight(), 1.0f);   }  });    return true; } }/** * 这个应用在每一帧中清空屏幕,当tap屏幕时,改变屏幕的颜色。 * @author Administrator * */class DemoRenderer2 implements GLSurfaceView.Renderer{  private float mRed; private float mGreen; private float mBlue; @Override public void onDrawFrame(GL10 gl) {  // TODO Auto-generated method stub  gl.glClearColor(mRed, mGreen, mBlue, 1.0f);  gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT); } @Override public void onSurfaceChanged(GL10 gl, int w, int h) {  // TODO Auto-generated method stub  gl.glViewport(0, 0, w, h); } @Override public void onSurfaceCreated(GL10 gl, EGLConfig config) {  // TODO Auto-generated method stub   }  public void setColor(float r, float g, float b){  this.mRed = r;  this.mGreen = g;  this.mBlue = b; } }

更多相关文章

  1. Android(安卓)之Http
  2. Android学习笔记(2)————Android四大组件之二(Service )
  3. Android学习笔记(1)————Android四大组件之一(Activity)
  4. Android(安卓)Parcelable接口使用方法详解
  5. android 非主线程内使用Looper
  6. Adb连接超时错误
  7. Keyguard之LockPatternView学习
  8. 编译android源码前的准备
  9. Android(安卓)Camera CTS related

随机推荐

  1. IDEA无限重置试用期插件 IDE过期时间插件
  2. Iconset:免费的 SVG 图标资源管理软件
  3. 一起学习朴素贝叶斯
  4. 运维工程师打怪升级必经之路 V1.0.1
  5. 大规模分布式系统资源管理(一)
  6. 运维工程师的宿命(困兽之斗)
  7. 【Java内存溢出】系列(2/8):GC overhead lim
  8. 小学生都开始学Python了,你还不抓紧提升技
  9. 我们知道ArrayList是线程不安全,请设计一
  10. kube-scheduler 源码解析