SurfaceView没有显示出来。

4

我有一个类,当我按下一个按钮时调用它,用作背景的.xml文件只是一个黑屏。 当我运行我的应用程序时,我遇到了这个错误:

FATAL EXCEPTION: main
java.lang.NullPointerException
  at com.synlight_development.tattoo_it.Menu$2.onClick(Menu.java:71)
  at android.view.View.performClick(View.java:2532)
  at android.view.View$PerformClick.run(View.java:9293)
  at android.os.Handler.handleCallback(Handler.java:587)
  at android.os.Handler.dispatchMessage(Handler.java:92)
  at android.os.Looper.loop(Looper.java:150)
  at android.app.ActivityThread.main(ActivityThread.java:4263)
  at java.lang.reflect.Method.invokeNative(Native Method)
  at java.lang.reflect.Method.invoke(Method.java:507)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
  at dalvik.system.NativeStart.main(Native Method)

你已经将它实现为可运行的了。这可能是我知识不足,但你在哪里启动线程来调用它呢? - Simon
我已经解决了这个问题,但是又遇到了另一个问题:http://stackoverflow.com/questions/13278991/android-surfaceview-not-passing-ifholder-getsurface-isvalid-continue我很想解释一下如何解决,但我不知道... - jister13
2个回答

4
由于SurfaceView默认显示在窗口底部,因此可以尝试以下操作。
   v.setZOrderOnTop(true);  //it puts surfaceview to top of your window.

或者在您的SView类中设置这些参数,例如在构造函数等处。
   setZOrderOnTop(true); 

如果你想使用GlSurfaceView。在构造函数中尝试这样做:
   setEGLConfigChooser(8,8,8,8,16,0);
   getHolder().setFormat(PixelFormat.TRANSLUCENT);

多亏了这一点,你的SurfaceView变得透明了。

如果你尝试将SurfaceView放在窗口的中间层,那就比这更困难了。

   surfaceView.setZOrderMediaOverlay(true);

你看到黑屏是因为你的SurfaceView需要另一个SurfaceView在其上方。我解决了这个问题,创建了另一个SurfaceView(也许你想使用CameraView等),绘制背景图像,并将另一个SurfaceView置于其上方,再添加其他视图至窗口顶部。
1.层 -> backgroundDrawnSurfaceView
2.层(中间层) -> myrealSurfaceView
3.层 -> 另一个视图。

尝试使用v.SetZOrderOnTop(true);解决了我的问题,或者在SView构造函数中使用setZOrderOnTop(true); - Barış Çırıka
非常感谢,它有效了! - gurkan

0

您已编辑了您的问题

首先,您需要添加SView动作监听器本身。 然后,在Editor活动的onCreate中,您需要将触摸监听器添加到您的SView,Editor中。 并且没有找到线程。

尝试这个解决方案 -> 删除

    v.setOnTouchListener(this);

并添加

  sleep(50); 

在SView中,触摸监听器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接