как сделать поверхность прозрачной - PullRequest
81 голосов
/ 22 марта 2011

Здравствуйте, все, что я хочу сделать прозрачным для моего 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>

Ответы [ 4 ]

208 голосов
/ 15 августа 2011

Попробуйте это в конструкторе:

SurfaceView sfvTrack = (SurfaceView)findViewById(R.id.sfvTrack);
sfvTrack.setZOrderOnTop(true);    // necessary
SurfaceHolder sfhTrackHolder = sfvTrack.getHolder();
sfhTrackHolder.setFormat(PixelFormat.TRANSPARENT);
6 голосов
/ 14 января 2017
sfvTrack.setZOrderOnTop(true); 

поместит SurfaceView поверх окна, что означает, что вы не можете добавлять элементы поверх SurfaceView.

Если вы хотите добавить виды поверх представления поверхности;вам следует рассмотреть возможность использования:

setZOrderMediaOverlay(true);

вместо.Это помещает этот поверхностный вид поверх других поверхностных видов, но все еще за окном, позволяя вам добавлять другие видимые виды поверх поверхностного вида.

4 голосов
/ 05 февраля 2014

TexttureView будет лучше для ваших нужд, чем SurfaceView, я считаю.

4 голосов
/ 22 марта 2011

Является ли ваша DrawingSurface и расширение SurfaceView?

Нет способа заставить SurfaceView делать то, что вы от него хотите. Механика вида поверхности такова, что за ним не может быть ничего видимого. (см. ответ здесь http://groups.google.com/group/android-developers/browse_thread/thread/8d88ef9bb22da574)

Я проверил вашу иерархию с помощью пользовательского представления, расширяющего SurfaceView, и вижу вашу проблему. Если я переключаюсь на пользовательский вид, который просто расширяет вид, я могу получить прозрачность.

...