首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >安卓GLSurfaceView.Renderer正在中断未完成的触摸事件

安卓GLSurfaceView.Renderer正在中断未完成的触摸事件
EN

Stack Overflow用户
提问于 2011-02-26 20:36:25
回答 2查看 2.5K关注 0票数 2

这是一个我已经有一段时间的问题了,我希望这里有人能给我一些启发。

我有一个安卓游戏,它加载了一个GLSurfaceView,它的渲染器是这样设置的:

代码语言:javascript
运行
AI代码解释
复制
public class GameRenderer implements GLSurfaceView.Renderer
{
    public void onSurfaceCreated(GL10 gl, EGLConfig config)
    {
        BaseLib.init(); // Initializes the native code
    }

    public void onSurfaceChanged(GL10 gl, int width, int height)
    {}

    public void onDrawFrame(GL10 gl)
    {
        BaseLib.render(); // Call to native method to render/update the current frame
    }
}

视图如下所示:

代码语言:javascript
运行
AI代码解释
复制
public class GameView extends GLSurfaceView implements SurfaceHolder.Callback
{
    private GameRenderer _renderer;
    private GameListener _listener;

    public GameView(Context context)
    {
        super(context);
        this._renderer = new GameRenderer();
        setRenderer(this._renderer);
        this._listener = new GameListener();
        BaseLib.setListener(this._listener);
    }

    public boolean onTouchEvent(final MotionEvent event)
    {
        int action = -1;
        switch(event.getAction())
        {
        case MotionEvent.ACTION_DOWN: action = 0; break;
        case MotionEvent.ACTION_UP: action = 1; break;
        case MotionEvent.ACTION_MOVE: action = 2; break;
        }
        if(action >= 0)
            BaseLib.touch(action, event.getX(), event.getY());

        return true;
    }
}

我一直在跟踪本机代码,我注意到一个问题,在touch事件中途,似乎正在进行另一个render()调用。因为触摸事件还没有完成,所以它最终会产生一些错误,因为它试图渲染还没有完成加载的对象。

这可能是本机代码本身的问题,但由于到目前为止我还没有找到问题所在,所以我想问一下,Java代码是否可能中断了对touch的调用,并在完成之前调用了另一个onDrawFrame()

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-26 21:10:31

触摸事件和渲染发生在两个不同的线程上。你必须正确地同步你的数据读/写。

票数 5
EN

Stack Overflow用户

发布于 2012-03-09 19:37:22

这里的解决方案是,无论何时捕获触摸事件(发生在UI线程上),都会将相同的事件作为runnable放入GLSurfaceView中,因此它将在GLSurfaceView的渲染器线程上以正确的顺序执行。示例代码:

代码语言:javascript
运行
AI代码解释
复制
 @Override
    public boolean onTouchEvent(MotionEvent event)
    {
        if (event != null)
        {
            if (event.getAction() == MotionEvent.ACTION_DOWN)
            {
                if (mRenderer != null)
                {
                    // Ensure we call switchMode() on the OpenGL thread.
                    // queueEvent() is a method of GLSurfaceView that will do this for us.
                    queueEvent(new Runnable()
                    {
                        @Override
                        public void run()
                        {
                            mRenderer.switchMode();
                        }
                    });

                    return true;
                }
            }
        }

        return super.onTouchEvent(event);
    }

有关此问题的更多信息的教程:

http://www.learnopengles.com/listening-to-android-touch-events-and-acting-on-them/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5129580

复制
相关文章
安卓监听屏幕触摸事件_android设置按钮点击事件
public boolean onTouchEvent(MotionEvent event) {
全栈程序员站长
2022/10/03
2.2K0
安卓 View 的事件体系
View 的位置由它的四个顶点来决定, 分别对应 View 的四个属性:top, left, right, bottom, 其中top是左上角的纵坐标, left 是左上角的横坐标, right是右下角的横坐标, bottom是右下角的纵坐标. 需要注意的是, 这些坐标都是相对于View的父容器来说的,这是一种相对坐标.
acc8226
2022/05/17
4570
安卓 View 的事件体系
安卓开发之事件
事件处理:提供为用户动作响应的机制 Android提供两种方式的事件处理 一、基于回调的事件处理 二、基于监听的事件处理 事件监听处理模型中三类对象: 事件源:EventSource通常是组件(按钮,窗口,菜单) 事件:Event通常是用户的操作 事件监听器:Event Listener通常是对不同事件做出的响应 实现事件监听器如下几种形式: 4.1内部类形式:将事件监听器定义成当前类的内部类 4.2外部类形式:将事件监听器定义成一个外部类 4.3 Activity本身作为一个事件监听器类:让Activit
苦咖啡
2018/05/08
1.5K0
安卓和 ios滚动事件的差异
document.documentElement.scroll 仅在 ios 有效,
蓓蕾心晴
2022/11/21
9460
unity touch事件_安卓开发按钮点击事件
{ if(input.touches[0].phase==TouchPhase.Beagn)
全栈程序员站长
2022/09/30
2.3K0
Android触摸事件_wpf触摸屏点击事件
这些方法都是View类的,所以像TextView这样看似不是按钮的组件也可以使用这些监听。
全栈程序员站长
2022/09/30
2.1K0
touchesBegan 触摸事件
1、在用户使用App过程中,会产生各种各样的事件,iOS中的事件可以分为3大类型:
全栈程序员站长
2022/09/15
8420
WPF 从触摸消息转触摸事件
在 WPF 程序可能因为一些坑让程序触摸失效,如果此时还可以收到系统的触摸消息,那么可以通过从触摸消息转触摸事件解决程序触摸失效但不适合所有触摸失效程序
林德熙
2020/07/07
1.2K0
平台战事又起,微信正在瓦解安卓、iOS的统治
《经济学人》近日撰文称,微信、WhatsApp、Snapchat等消息应用飞速增长,传统软件面临巨大竞争压力。以Facebook为代表的开发商意图打造全新的服务平台,新平台将与Android和iOS争夺统治地位。 文章全文由腾讯科技翻译如下: “如若发现,我建议抓住他的脖子,摇到他口吐白沫,掏出他的内脏,让他自己吞下去。”硅谷人可不常引用英国小说家佩勒姆·G·伍德豪斯爵士的文章。但硅谷风投公司Andreessen Horowitz的班尼迪克·埃文斯(Benedict Evans)认为,消息服务会对移动
人称T客
2018/03/20
1.1K0
WPF 触摸到事件
在 WPF 界面框架核心就是交互和渲染,触摸是交互的一部分。在 WPF 是需要使用多个线程来做触摸和渲染,触摸是单独一个线程,这个线程就是只获得触摸,而将触摸转路由是在主线程。
林德熙
2018/09/19
1.3K0
WPF 触摸到事件
安卓基础干货(七):安卓广播的学习
android应用程序里面的电台:系统内置的一个服务,会把事件(电量不足、电量充满、开机启动完成)作为一个广播消息发送其他的接收者;
緣來
2018/09/18
4.1K0
安卓基础干货(八):安卓进程的学习
接口(interface): 对外开放暴露的功能,但是不会暴露功能实现的细节; 让中间人实现服务接口的目的:只对外暴露接口里面业务逻辑方法,隐藏中间人里面的其他方法;
緣來
2018/09/18
4.1K0
安卓的日历_公认不卡的安卓手机
代码已上传到github:https://github.com/yannecer/NCalendar 项目主要用到了自定义View,ViewPager,RecyclerView和NestedScrollingParent。
全栈程序员站长
2022/08/03
4.9K0
安卓的日历_公认不卡的安卓手机
CreatorPrimer|触摸事件冒泡
前两天正在愁公众号写点什么,打开微信看到uikiller用户「悦雨」遇到了一个问题:
张晓衡
2019/09/11
1.4K0
CreatorPrimer|触摸事件冒泡
Android触摸事件机制
本篇为梦痕投稿,不可错过的干货哟 前言 随着科学技术的发展,智能手机早已成为我们当代人身边必不可少的“伙伴”之一,堪比对象女友。每天我们对着手机重复的做着点击、滑动操作,而手机则随着我们的操作给我们展示她的精彩。 … 废话到此结束。 看到这里,即使不是作为移动端码农的你也应该知道触摸事件对手机(经典键盘机除外)的重要性了。 什么是触摸事件 顾名思义,就是触摸手机屏幕后产生的事件。这时候请你拿出手机,点击屏幕中的某个按钮(不要松手),移动一段距离,松手。 这个过程一般会产生如下几个事件: 点击(Down)事
巫山老妖
2018/07/20
7340
Flutter触摸事件原理
Flutter 触摸事件的处理点在 GestureBinding中。在 GestureBinding 中存在一个 handlerPointerEvent方法,这个方法就是触摸事件在 Flutter 侧的触发点。
烧麦程
2022/05/10
1.4K0
Flutter触摸事件原理
安卓 toast_安卓toast使用
一个 toast 是在屏幕上弹出一条信息,它的大小总是包裹着需要显示的内容,并且当前的 Activity 依然是可见并且可互动的。toast会自动消失,并且不接受任何互动事件。因为 toast 可以在后台的 Service 中创建,所以即使这个应用程序没有显示在屏幕上,仍然可以弹出 toast.
全栈程序员站长
2022/10/01
6.5K0
如何从电脑直接控制安卓手机 监控安卓手机 安卓手机如何控制安卓手机
实用方法很简单,在手机上安装这个软件,然后运行,然后进入Setting,点击User's settings,然后Create new user(我新建了一个叫做ACE的用户),注意这里在豌豆荚的截图只是做教程用的,实际不需要连接豌豆荚,甚至不需要WIFI,只要你打开了GPRS
程序员小顾
2021/12/01
16.7K0
安卓基础干货(六):安卓Activity的学习
5、application中的label标签和activity中的label标签不是一个概念,application中的label表示应用程序的名称,activity中的label标签表示的是它的界面的名称。
緣來
2018/09/18
2.9K0
『安卓』安卓开发基础--基本控件
显示文字,相当于Panel。一般用来文本展示,继承自android.view.View,在android.widget包中。
风骨散人Chiam
2020/10/28
7.1K0

相似问题

安卓TextView触摸事件

10

安卓WebView触摸事件链接

20

安卓MapView中的触摸事件

20

安卓WebView中的触摸事件

11

安卓JavaScript中的触摸事件

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文