SurfaceView를 투명하게 만드는 방법


83

안녕하세요, DrawingSurface 뷰를 투명하게 만들고 싶습니다. 나는 많은 것을 시도했지만 작동하지 않습니다.

내 표면보기를 투명하게 만드는 XML 코드는 다음과 같습니다.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:src="@drawable/icon" >
        </ImageView>

        <LinearLayout
            android:id="@+id/linearLayout1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="#00000000" >

            <codewalla.android.drawings.DrawingSurface
                android:id="@+id/drawingSurface"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent" >
            </codewalla.android.drawings.DrawingSurface>
        </LinearLayout>
    </FrameLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/colorRedBtn"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="10"
            android:onClick="onClick"
            android:text="R" />

        <Button
            android:id="@+id/colorBlueBtn"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="10"
            android:onClick="onClick"
            android:text="G" />

        <Button
            android:id="@+id/colorGreenBtn"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="10"
            android:onClick="onClick"
            android:text="B" />

        <Button
            android:id="@+id/undoBtn"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="10"
            android:onClick="onClick"
            android:text="U" />

        <Button
            android:id="@+id/redoBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="10"
            android:onClick="onClick"
            android:text="R" />
    </LinearLayout>

</RelativeLayout>

답변:


214

생성자에서 이것을 시도하십시오.

SurfaceView sfvTrack = (SurfaceView)findViewById(R.id.sfvTrack);
sfvTrack.setZOrderOnTop(true);    // necessary
SurfaceHolder sfhTrackHolder = sfvTrack.getHolder();
sfhTrackHolder.setFormat(PixelFormat.TRANSPARENT);

9
와우, 나는 이미 투명한 픽셀 형식과 XML에 투명한 배경을 추가 한 상태에서 이것을 망치고있었습니다. 'setZOrderOnTop (true)'호출이 위험하다는 것이 밝혀졌습니다. 이것을 게시 해주셔서 감사합니다.
ProjectJourneyman 2011

43
이것은 setZOrderOnTop ()이이 SurfaceView 위에 그래픽을 배치 할 수 없다는 것을 제외하고는 훌륭하게 작동합니다. = \
drc 2012-08-16

2
그러나 레이아웃의 다른 모든 뷰를 다루기 때문에 표면 뷰에 그리면 이미지 / 버튼이 그려집니다. 이 문제에서 어떻게 벗어날 수 있습니까?
skygeek

내 편에서 시도했습니다. 4.0에서 잘 작동하지만 2.3.
wayne_bai

2
Grafika의 "다중 표면 테스트"는 View UI 레이어와 혼합 된 세 개의 투명하게 겹치는 SurfaceView를 보여줍니다. github.com/google/grafika/blob/master/src/com/android/grafika/... . FWIW, "생성자에서 시도"는 "다음에서 시도"로 표시되어야 onCreate()하며 픽셀 형식을 RGB565에서 RGB888로 변경하는 것도 매우 필요합니다.
fadden

8
sfvTrack.setZOrderOnTop(true); 

창 위에 surfaceView를 배치합니다. 즉, surfaceView 위에 항목을 추가 할 수 없습니다.

표면 뷰 위에 뷰를 추가하려면; 다음 사용을 고려해야합니다.

setZOrderMediaOverlay(true);

대신. 이렇게하면이 surfaceView가 다른 surfaceView 위에 배치되지만 여전히 창 뒤에 있으므로 표면 뷰 위에 다른 보이는 뷰를 추가 할 수 있습니다.


4

DrawingSurface 및 SurfaceView의 확장입니까?

원하는 작업을 수행하도록 SurfaceView를 얻을 수있는 방법은 없습니다. 표면보기의 메커니즘은 그 뒤에 아무것도 보이지 않도록합니다. ( http://groups.google.com/group/android-developers/browse_thread/thread/8d88ef9bb22da574 에서 답변 참조 )

SurfaceView를 확장하는 사용자 지정보기로 계층 구조를 테스트했는데 문제가 있음을 확인했습니다. 단순히보기를 확장하는 사용자 지정보기로 전환하면 투명성을 얻을 수 있습니다.


내가 카메라 미리보기에 그리 할 수 있도록 감사 slund, 그것은 그것을 내 그리기면 당신은 잘하지만 그것은 뒤에 카메라 미리보기를 넣어 필요
선일 펜디 교수

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.