- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
系统没有在我的应用程序中调用 onTouchEvent。我已经尝试在 Activity 、 View 和渲染器中使用 onTouchEvent 实现它。他们都没有被叫到。所以我在 Activity 和 View 上尝试了 dispatchTouchEvent,但仍然没有被调用。它基于我编译的 San Angeles NDK 示例,可以正确检测触摸。
下面是完整的java源代码,其他一切都是原生的c++。
package com.example.SanAngeles;
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;
public class DemoActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mGLView = new DemoGLSurfaceView(this);
setContentView(mGLView);
}
@Override
protected void onPause() {
super.onPause();
mGLView.onPause();
}
@Override
protected void onResume() {
super.onResume();
mGLView.onResume();
}
private DemoGLSurfaceView mGLView;
static {
System.loadLibrary("Android");
}
}
class DemoGLSurfaceView extends GLSurfaceView {
public DemoGLSurfaceView(Context context) {
super(context);
mRenderer = new DemoRenderer();
mRenderer.context = context;
setRenderer(mRenderer);
}
@Override
public boolean onTouchEvent(final MotionEvent event) {
System.out.println("onTouchEvent");
System.out.println("Motion Event" + event.getAction());
if (event.getAction() == MotionEvent.ACTION_DOWN) {
System.out.println("ACTION DOWN");
final int pointerCount = event.getPointerCount();
System.out.println("down pcount:" + pointerCount);
for(int i = 0; i < pointerCount; i++)
{
System.out.println("Touch x:" + event.getX(i) + "y:" + event.getY(i));
int id = event.getPointerId(i);
nativeTouchDown(id, (int)event.getX(i), (int)event.getY(i));
}
}
if (event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL) {
final int pointerCount = event.getPointerCount();
System.out.println("up pcount:" + pointerCount);
for(int i = 0; i < pointerCount; i++)
{
int id = event.getPointerId(i);
nativeTouchUp(id);
}
}
if (event.getAction() == MotionEvent.ACTION_MOVE) {
final int pointerCount = event.getPointerCount();
System.out.println("move pcount:" + pointerCount);
for(int i = 0; i < pointerCount; i++)
{
int id = event.getPointerId(i);
nativeTouchMove(id, (int)event.getX(i), (int)event.getY(i));
}
}
return true;
}
DemoRenderer mRenderer;
private static native void nativePause();
}
class DemoRenderer implements GLSurfaceView.Renderer {
Context context;
Object am;
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
am = (Object)context.getAssets();
System.out.println("HDROP:\n AssetManager:" + am);
nativeInit(am, 500,500);
}
public void onSurfaceChanged(GL10 gl, int w, int h) {
//gl.glViewport(0, 0, w, h);
System.out.println("Hdrop surface changed");
nativeResize(w, h);
}
public void onDrawFrame(GL10 gl) {
nativeRender();
}
private static native void nativeInit(Object assetManager, int w, int h);
private static native void nativeTouchDown(int id, int x, int y);
private static native void nativeTouchUp(int id);
private static native void nativeTouchMove(int id, int x, int y);
private static native void nativeResize(int w, int h);
private static native void nativeRender();
private static native void nativeDone();
}
最佳答案
onTouch 可以在您想要的任何地方工作(即,如果它是 Activity 或 View ),只要您已声明接口(interface)并将监听器设置正确!另一方面,onTouchEvent 仅在 View 内工作
换句话说,onTouch() 被 View 的用户使用 来获取触摸事件,而 onTouchEvent() 被 View 的派生类使用获取触摸事件
尝试用 onTouch 替换 onTouchEvent..
希望对你有帮助
关于java - 无法在 GLSurfaceView 上获取 android 触摸事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16370929/
我有一个增强现实应用程序,它显示相机 View 和一个带有多边形的 GLSurfaceView,该多边形可以在触摸屏幕时旋转。我的应用程序的主要布局是 FrameLayout。 frameLayout
我对 EGL 感到困惑。 我的 GLSurfaceView 创建了一个 EGLContext。现在我创建一个共享上下文。现在我需要使用 EGLExtension。 我必须使用的方法被称为(>=API1
是否可以在 GLSurfaceView 上添加 LinearLayout?如何在 GLSurfaceView 上叠加 LinearLayout?也许 GLSurfaceView 是 Game play
请,有人可以提供使用带有 GLSurfaceView 的 CameraX 库的好例子,找不到任何信息。 最佳答案 不存在将 CameraX 与自定义表面/TextureView 一起使用的文档。在 C
我尝试在我的 GLSurfaceView 上使用 setRotation(),但 View 似乎没有围绕屏幕中心的枢轴旋转。代码如下: class MyGLSurfaceView extends GL
我正在尝试运行 android 示例 http://developer.android.com/training/graphics/opengl/index.html 我必须向 View 添加一些控件
我有 GLSurfaceView 和顶部带有按钮的小型 LinearLayout,代表菜单。此布局默认隐藏,并在用户点击某个按钮时从屏幕底部(通过 TranslateAnimation)显示。 (也尝
我在我的应用程序中使用开放式 GL。我还在我的 Activity 中创建了一个操作栏,将其 View 设置为表面 View 。但是我无法获得操作栏。它在我的表面后面吗?我不知道。我只是无法得到它。我当
实际上,我有一个项目正在使用 GLSurfaceView。此时此组件作为主控件放置在整个屏幕上。在此配置中,我能够正确处理绘图功能。 在下一步中,我想更改 GLSurfaceView 的大小和位置。我
根据标题,从暂停状态恢复后 GLSurfaceView 为空白。 Renderer的onSurfaceCreated、onSurfaceChanged和onDrawFrame在恢复后被调用,但是屏幕还
我有一个带有可绘制对象作为背景的 GLSurfaceView,但是在没有 surfaceView.setZOrderOnTop(true) 的情况下渲染时只有背景可见 我需要避免使用 setZOrde
我正在尝试在 Android 上使用 GLSurfaceView 并遇到问题。我正在使用 this OpenGL article 中的代码.它运行良好,但当我旋转设备时,我注意到分配的内存在增长。 所
我有一个 GLSurfaceView,我在其中使用 OpenGL 显示一些动画。 我现在想给这个 View 添加一个按钮。这是如何实现的? 不涉及xml布局能不能做到? 最佳答案 您可以手动构建 Vi
我正在做一个项目,我们需要记录渲染的 OpenGL 表面。 (例如,如果我们使用 GLsurfaceView,我们需要记录表面以及来自 MIC 的音频) 目前我通过将视频源设置为 VIDEO_SOUR
我尝试使用 GLSurfaceView 进行渲染,并通过 docs我设置格式: getHolder().setFormat(PixelFormat.TRANSLUCENT); 我使用的是 GLSurf
我的程序在两个 Activity 之间切换,每个 Activity 都会膨胀一个使用 VBO 的派生 GLSurfaceView。 在两个Activity之间来回切换几次后,程序崩溃并抛出如下异常:
我正在尝试在 android 上开始使用 opengl。 我找到的所有教程都假定 GLSurfaceView 可用。当我尝试编译我的项目时,我得到了 GLSurfaceView cannot be r
我目前正在开发一个 Android 应用程序,我希望在单击按钮时重新启动 glSurfaceView。即当单击按钮时,应再次将图像读入程序并重置所有纹理。我应该怎么办?谢谢。 最佳答案 听起来您只想在
虽然我发现了一个关于 Sharing the GLES20 context... 的问题,我觉得我的情况比较宽泛一些。 我有两个 GLSurfaceView 在 FrameLayout 中彼此分层。
我正在尝试使用 MediaCodec 播放视频并通过 GLSurfaceView 呈现它,以便我可以进行帧回调。 package com.alwaysinnovating.aimediacodec;
我是一名优秀的程序员,十分优秀!