【发布时间】:2014-08-16 04:47:10
【问题描述】:
我的 (OpenGL ES 2.0) 应用有一个启动画面,它基本上是一个 Android View,显示在我的 GLSurfaceView 上。
我在 AsyncTask 上完成所有初始设置,然后(非必要)在 onSurfaceCreated 的 GLRendering 线程上加载我的位图/纹理。加载完所有内容后,我会关闭启动画面。
除了一件事之外,一切都按预期工作。闪屏仍然接受输入,如果在应用程序启动后触摸屏幕,我(显然)会得到一个空指针异常。
我只是像这样创建我的视图:
splashscreen = new SplashScreen(getApplication(), width, height); //Where SplashScreen is a custom class that extends View
然后我将它添加到我的布局中,如下所示:
layout.add(myView); //My GLSurfaceView
layout.add(splashscreen); //The splashscreen View
setContectView(layout);
加载完所有内容后,我只需删除(启动画面)视图即可在下面显示我的 GLSurfaceView:
layout.removeView(splashscreen);
splashscreen=null; //Null it
目前,在我的 onTouch 方法中,为了解决这个问题,我已经像这样进行了检查:
public boolean onTouchEvent(MotionEvent event) {
if(splashscreen==null){
//Do touch related stuff here
}
return true;
}
这确实有效,但是,我确信这不是实现我所追求的最干净的方式。
我试过了:
splashscreensetClickable(false);
和
layout.setClickable(false);
以及setEnabled(false)
似乎没有任何效果,但我确定一定有办法做到这一点......
【问题讨论】:
-
你能澄清几件事吗? “闪屏仍然接受输入,如果在应用程序启动后触摸屏幕,我(显然)得到一个空指针异常。”为什么你希望你的闪屏在它时不阻止触摸输入是可见的?为什么会发生这种 NPE?
-
嗨@TrevorSiemens,启动画面根本不应该接受输入。没有理由这样做。用户可以在加载所有内容时按下主页按钮,如果他们想退出。但是,启动画面不应该是“交互式的”。发生空指针是因为一旦按下屏幕,它就会开始运行应用程序并调用 GLRenderer,它试图对尚不存在的对象采取行动......希望这是有道理的 :-) 然而,这足以知道闪屏不应该接受输入,因此应该禁用它!
-
我在想几件事:即使启动画面不应该是“交互式”的,它仍然应该接受触摸输入。它根本不应该对它做任何事情。您可以通过覆盖初始屏幕的 onTouchEvent 来做到这一点,并简单地返回 true。这将允许它阻止下面视图上的触摸事件,但不会发生任何事情。
-
感谢@TrevorSiemens,这非常有效!我必须承认,我仍然不完全确定它为什么会起作用,我猜测覆盖 onTouchEvent 只是“收集”此视图(启动屏幕)的触摸事件,而没有这个,它将触摸事件传递给 Main Activiy onTouch 方法??如果您想将此作为答案,我会接受!谢谢:-)
标签: java android touch opengl-es-2.0 ontouchlistener