如何在锁屏上显示SurfaceView?

时间:2012-12-10 09:11:57

标签: android surfaceview lockscreen keyguard

我正在努力实现锁屏,就像三星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? 非常感谢。

2 个答案:

答案 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);