Как сделать поверхность прозрачной
Привет всем, я хочу сделать мой рисунок 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 ответа
Попробуйте это в конструкторе:
SurfaceView sfvTrack = (SurfaceView)findViewById(R.id.sfvTrack);
sfvTrack.setZOrderOnTop(true); // necessary
SurfaceHolder sfhTrackHolder = sfvTrack.getHolder();
sfhTrackHolder.setFormat(PixelFormat.TRANSPARENT);
sfvTrack.setZOrderOnTop(true);
поместит SurfaceView поверх окна, то есть вы не можете добавлять элементы поверх SurfaceView.
Если вы хотите добавить виды поверх вида поверхности; Вы должны рассмотреть возможность использования:
setZOrderMediaOverlay(true);
вместо. Это помещает этот поверхностный вид поверх других поверхностных видов, но все еще за окном, позволяя вам добавлять другие видимые виды поверх поверхностного вида.
Является ли ваша DrawingSurface и расширение SurfaceView?
Нет способа заставить SurfaceView делать то, что вы от него хотите. Механика вида поверхности такова, что за ним не может быть ничего видимого. (см. ответ здесь http://groups.google.com/group/android-developers/browse_thread/thread/8d88ef9bb22da574)
Я проверил вашу иерархию с помощью пользовательского представления, расширяющего SurfaceView, и вижу вашу проблему. Если я переключаюсь на пользовательский вид, который просто расширяет вид, я могу получить прозрачность.
TexttureView
будет лучше для ваших нужд, чем SurfaceView
, я верю.