成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android---OpenGL ES之響應觸屏事件

移動開發 Android
本文介紹如何監聽觸碰事件,讓用戶可以旋轉OpenGL ES對象。為了讓你的OpenGL ES應用程序響應觸碰事件,你必須在你GLSurfaceView類中實現onTouchEvent()事件。

像旋轉三角形那樣,讓對象根據預設的程序來移動,以便有助于獲取人們的關注,但是如 果想要讓你的OpenGL ES圖形跟用戶交互,應該怎樣做呢?要讓你的OpenGL ES應用程序能夠觸碰交互的關鍵是擴展你的GLSurfaceView實現,重寫它的onTouchEvent()方法來監聽觸碰事件。

本文介紹如何監聽觸碰事件,讓用戶可以旋轉OpenGL ES對象。

設置觸碰監聽器

為了讓你的OpenGL ES應用程序響應觸碰事件,你必須在你GLSurfaceView類中實現onTouchEvent()事件。以下實現的示例顯示如何監聽MotionEvent.ACTION_MOVE事件,并把它們轉換成圖形旋轉的角度。

  1. @Override 
  2.   public boolean onTouchEvent(MotionEvent e) { 
  3.   // MotionEvent reportsinput details from the touch screen 
  4.   // and other inputcontrols. In this case, you are only 
  5.   // interested in eventswhere the touch position changed. 
  6.   float x = e.getX(); 
  7.   float y = e.getY(); 
  8.   switch (e.getAction()) { 
  9.   case MotionEvent.ACTION_MOVE: 
  10.   float dx = x - mPreviousX; 
  11.   float dy = y - mPreviousY; 
  12.   // reverse direction of rotation above the mid-line 
  13.   if (y > getHeight() / 2) { 
  14.   dx = dx * -1 ; 
  15.   } 
  16.   // reverse direction of rotation to left of the mid-line 
  17.   if (x < getWidth() / 2) { 
  18.   dy = dy * -1 ; 
  19.   } 
  20.   mRenderer.mAngle += (dx + dy) * TOUCH_SCALE_FACTOR; // = 180.0f /320 
  21.   requestRender(); 
  22.   } 
  23.   mPreviousX = x; 
  24.   mPreviousY = y; 
  25.   return true
  26.   } 

注意,計算旋轉的角度之后,這個方法調用了requestRender()方法來告訴渲 染器,到了渲染幀的時候了。上例中所使用的方法是最有效的,只有在有旋轉變化時,幀才會被重繪。但是要想只在數據變化的時候,才請求渲染器重繪,就要使用 setRenderMode()方法來設置繪制模式。

  1. publicMyGLSurfaceView(Context context){ 
  2.   ... 
  3.   // Render the view onlywhen there is a change in the drawing data 
  4.   setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); 
  5.   } 

暴露旋轉的角度

上例代碼要求你通過添加一個公共的成員變量,通過渲染器把旋轉的角度暴露出來。因為渲染器代碼運行在一個獨立于主用戶界面線程之外的線程中,所以你必須聲明一個公共變量,代碼如下:

  1. publicclassMyGLRendererimplementsGLSurfaceView.Renderer{ 
  2.   ... 
  3.   public volatile float mAngle; 

應用旋轉

以下代碼完成由觸碰輸入所產生的旋轉:

  1. publicvoidonDrawFrame(GL10 gl){ 
  2.   ... 
  3.   // Create a rotation forthe triangle 
  4.   // long time =SystemClock.uptimeMillis() % 4000L; 
  5.   // float angle = 0.090f *((int) time); 
  6.   Matrix.setRotateM(mRotationMatrix, 0, mAngle, 00, -1.0f); 
  7.   // Combine the rotationmatrix with the projection and camera view 
  8.   Matrix.multiplyMM(mMVPMatrix, 0, mRotationMatrix, 0, mMVPMatrix, 0); 
  9.   // Draw triangle 
  10.   mTriangle.draw(mMVPMatrix); 
  11.   } 

本文譯自:http://developer.android.com/training/graphics/opengl/touch.html

責任編輯:閆佳明 來源: bbs.9ria
相關推薦

2014-04-29 14:05:02

OpenGL ESAndroid添加動作

2014-04-29 14:08:40

OpenGL ESAndroid應用投影

2011-07-28 10:26:18

2013-04-15 15:22:06

2014-04-29 14:16:54

2010-09-10 10:09:26

Android

2014-04-29 14:27:59

OpenGL ES 2Android繪制紋理

2014-04-24 13:35:11

OpenGL ES2.iOSAndroid

2017-04-25 09:04:16

2009-05-28 09:35:52

2014-04-24 11:16:00

OpenGL ES 2入門

2014-02-10 09:30:14

Windows 8.1

2011-03-21 15:23:24

觸屏網頁設計

2013-01-11 13:30:38

觸屏智能手機新聞閱讀

2014-04-29 14:49:37

OpenGL ES 2Android應用投影

2013-05-16 15:08:33

2017-07-24 14:32:49

2013-07-05 14:45:05

AndroidOpenGL ES開發

2009-11-04 08:56:03

Windows 7觸摸屏

2011-05-10 17:19:06

戴爾評測
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩欧美亚洲综合 | 久草成人网 | 亚洲欧美国产精品一区二区 | 亚洲精品久久 | 超碰最新在线 | 国产精品美女久久久久久免费 | 精品中文字幕在线 | 国产网站在线播放 | 久久久久久久久91 | 欧美福利专区 | 欧美在线高清 | 91精品国产综合久久福利软件 | 日韩在线欧美 | 午夜影院 | 久久涩涩| 久久91精品国产一区二区三区 | 日韩一区二区三区在线视频 | 精品一区免费 | 中文字幕亚洲精品 | 国产精品久久国产精品 | 91欧美 | 欧美一区二区大片 | 成人在线观看免费 | 亚洲视频在线看 | 久久久国产一区二区三区 | 国产三区四区 | 日本不卡免费新一二三区 | 综合精品久久久 | 免费在线观看成人 | 亚洲成人久久久 | 日本黄色高清视频 | 亚洲成人一区二区三区 | 热99视频| 麻豆久久精品 | 亚洲九九 | www.天天操.com| a毛片| 91精品国产91久久久久久不卞 | 欧美成人第一页 | 亚洲综合天堂网 | 天天玩天天干天天操 |