Android GLSURFACHEVIEW未获取此类事件
我遵循了谷歌提供的onTouch示例。但是,我的日志中没有任何内容。据我所知,我的观点并没有提到任何触控事件。这是我的代码:Android GLSURFACHEVIEW未获取此类事件,android,opengl-es,Android,Opengl Es,我遵循了谷歌提供的onTouch示例。但是,我的日志中没有任何内容。据我所知,我的观点并没有提到任何触控事件。这是我的代码: package com.test; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; import android.app.Activity; import android.content.Context; import a
package com.test;
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.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
public class intro extends Activity {
static{
System.loadLibrary("graphrender");
}
private GLSurfaceView mGLView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
mGLView = new GraphGLSurfaceView(this);
setContentView(mGLView);
}
@Override
protected void onPause() {
super.onPause();
mGLView.onPause();
}
@Override
protected void onResume() {
super.onResume();
mGLView.onResume();
}
}
class GraphGLSurfaceView extends GLSurfaceView {
GraphRenderer mRenderer;
public GraphGLSurfaceView(Context context) {
super(context);
mRenderer = new GraphRenderer();
setRenderer(mRenderer);
}
public boolean onTouch(View v, MotionEvent event)
{
queueEvent(new Runnable(){
public void run() {
mRenderer.shout();
}});
return true;
}
}
class GraphRenderer implements GLSurfaceView.Renderer {
private static native void nativeSetup();
private static native void nativeSize(int w, int h);
private static native void nativeRender();
private float _red = 0.9f;
private float _green = 0.2f;
private float _blue = 0.2f;
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
nativeSetup();
Log.d("intro", "Got to intro 4" );
}
public void onSurfaceChanged(GL10 gl, int w, int h) {
nativeSize(w,h);
}
public void onDrawFrame(GL10 gl) {
nativeRender();
}
public void shout()
{
Log.d("Graph Page", "gotta graph");
}
}
我能想到的唯一一件事是,我必须在xml文件中有一些新奇的东西,或者设置它的焦点。任何帮助都将不胜感激。这是因为如果您查看API,它实际上没有一个可供您覆盖的
onTouch
方法。这意味着永远不会调用onTouch
方法,这可能解释了为什么您从未看到它在运行。相反,如果要获取触摸事件,则应在活动中覆盖。像这样:
public class Intro extends Activity {
static{
System.loadLibrary("graphrender");
}
private GLSurfaceView mGLView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
mGLView = new GraphGLSurfaceView(this);
setContentView(mGLView);
}
@Override
protected boolean onTouchEvent(MotionEvent event) {
Log.i("motion", event);
return true;
}
@Override
protected void onPause() {
super.onPause();
mGLView.onPause();
}
@Override
protected void onResume() {
super.onResume();
mGLView.onResume();
}
}
现在应该可以了。您好,我尝试了这种方法,解决了一个类似的问题,但现在我似乎得到了除实际的GLsurfaceView之外的任何东西的触控事件……您也可以覆盖GLsurfaceView中的onTouchEvent()(它从视图类继承),这实际上比在活动中重写它更合适。谢谢,仍然在API级别29上工作,只是它不需要System.loadLibrary(“graphrender”)代码>