OpenGL的承载体是GLSurfaceView,而GLSurfaceView类在很多方面类似于View,那么它同样具有与View的一些待遇,比如也能够响应KeyEvent,MotionEvent事件等等,从前面几篇中,有很多立方体的图形可以在每次重绘的时候,设置不同的位置和旋转角度,就可以实现图形的位置的变化,这里就可以通过触摸事件产生的坐标位置,让图形跟随触摸方向移动或者变换.
整体上不是很难.
<1> : 新建Android studio工程,工程名为PumpKinBasicInput,绘制立方体借鉴了前一篇的.
主类:
package org.pumpkin.pumpkinbasicinput;
import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;
public class PumpKinMainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
InputSurfaceView inputSurfaceView=new InputSurfaceView(this);
setContentView(inputSurfaceView/*R.layout.activity_pump_kin_main*/);
}
}
继承GLSurfaceView类:
package org.pumpkin.pumpkinbasicinput;
import android.content.Context;
import android.opengl.GLSurfaceView;
import android.view.KeyEvent;
import android.view.MotionEvent;
/**
* Created by Administrator on 2016/5/6.
*/
public class InputSurfaceView extends GLSurfaceView {
private final float TOUCH_SCALE_FACTOR = 180.0f / 320.0f;
private float previousX;
private float previousY;
private InputRenderer renderer;
public InputSurfaceView(Context context) {
super(context);
renderer=new InputRenderer(context);
this.setRenderer(renderer);
this.requestFocus();
this.setFocusableInTouchMode(true);
}
@Override
public boolean onKeyDown(int keyCode,KeyEvent event){
switch (event.getAction()){
case KeyEvent.KEYCODE_DPAD_LEFT:
renderer.speedY -= 0.1f;
break;
case KeyEvent.KEYCODE_DPAD_RIGHT:
renderer.speedY += 0.1f;
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
renderer.speedX -= 0.1f;
break;
case KeyEven