我正在努力实现锁屏,就像三星Galaxy 3的水波纹锁屏一样。我已经完成了GLSurfaceView对象。但是当我将它移植到锁屏时会出现问题。 SurfaceView无法显示在窗口类型为TYPE_KEYGUARD的锁定屏幕上。如果我对此SurfaceView使用setZOrderOnTop(true),它可以显示,但它将覆盖锁屏的所有其他层,这不是我的预期。 此SurfaceView可以在正常应用程序上正常显示。 我使用“adb shell dumpsys SurfaceFlinger”来转储图层信息。 它的visibleRegionScreen就像这样, 区域visibleRegionScreen(this = 0x15841a0,count = 1) [0,0,0,0]
任何人都知道如何解决此问题并在锁定屏幕上显示SurfaceView? 非常感谢。
答案 0 :(得分:0)
你对setZOrderOnTop(true)的调用是对的,但我真的不明白你的问题。您只在整个屏幕上看到SurfaceView?在这种情况下,只需将一个LinearLayout放在锁定屏幕布局xml中,然后将Surfaceview添加到其中。
在数字时钟视图后的 keyguard_screen_tab_unlock.xml 中,输入:
<LinearLayout
android:id="@+id/dummyGLLayout"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="top">
</LinearLayout>
在 LockScreen.java 构造函数中:
GLSurfaceView mySurfaceView
mySurfaceView = new MySurfaceViewClass(mContext);
LinearLayout ll = (LinearLayout) findViewById(R.id.dummyGLLayout);
mySurfaceView.setZOrderOnTop(true);
ll.addView(mySurfaceView);
答案 1 :(得分:0)
我很感激您的评论。 附上我的实施以供参考。 无法在锁定屏幕上显示GLSurfaceView。 我的布局如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/my_lockscreen_root"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<FrameLayout
android:id="@+id/my_lockscreen_clock"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:visibility="gone"/>
在LockScreen.java构造函数中添加GLSurfaceViewn:
RelativeLayout mRootLayout = (RelativeLayout) findViewById(R.id.my_lockscreen_root);
View myGLSurfaceView = new MyGLSurfaceView(mContext, mCallback);
FrameLayout.LayoutParams layoutparams =
new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
mRootLayout.addView(mUnlockWidget, 0, layoutparams);