2012-12-10 2 views
1

삼성 Galaxy 3의 물 리플 잠금 화면처럼 잠금 화면을 구현하기 위해 노력하고 있습니다. GLSurfaceView 개체를 완료했습니다. 그러나 Lock Screen으로 포팅 할 때 문제가 발생합니다. 창 유형이 TYPE_KEYGUARD 인 잠금 화면에 SurfaceView를 표시 할 수 없습니다. 이 SurfaceView에 setZOrderOnTop (true)를 사용하면 표시 될 수 있지만 내 기대가 아닌 다른 모든 Lock Screen 레이어를 덮어 씁니다. 이 SurfaceView는 정상적인 응용 프로그램에서 정상적으로 표시 될 수 있습니다. "adb shell dumpsys SurfaceFlinger"를 사용하여 레이어 정보를 덤프했습니다. 그 visibleRegionScreen는이 같은 지역 visibleRegionScreen (이 카운트, 0x15841a0을 = = 1)이다 [0, 0, 0, 0]이 문제를 해결하고 잠금 화면에 서피스 뷰 SurfaceView를 표시하는 방법을 kown잠금 화면에 SurfaceView를 표시하는 방법은 무엇입니까?

누구? 고마워요.

답변

0

당신은 setZOrderOnTop (true) 호출에 대해 옳지 만 귀하의 질문을 이해하지 못합니다. SurfaceView 만 전체 화면에서 볼 수 있습니까? 이 경우, 잠금 화면 레이아웃 xml에 LinearLayout을 놓고 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); 
+0

안녕 ola1olsson, 답장을 보내 주셔서 감사합니다. 그러나 귀하의 솔루션은 내 문제에 대해 작동하지 않습니다. SurfaceView는 여전히 setZOrderOnTop (true)로 전체 화면에 걸쳐 표시됩니다. – user1891056

+0

AOSP 장치에서이 작업을 직접 수행 한 이래로 조금 놀랍습니다. 나는 기회가있을 때마다 코드 차이로 돌아올 것이다. – ola1olsson

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