В моем приложении полупрозрачный Activity
с android:windowIsTranslucent
установлен на true
. Activity
содержит FrameLayout
, к которому я программно добавляю SurfaceView
.
По умолчанию SurfaceView
рисует растровое изображение, как Activity
фон Theme
, который в моем случае в Translucent
, поэтому SurfaceView
показывает прозрачное растровое изображение.
Для установки фона я использовал SurfaceHolder callbacks
следующим образом:
surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
Canvas canvas = holder.lockCanvas();
if (canvas != null) {
canvas.drawRGB(255, 255, 255);
holder.unlockCanvasAndPost(canvas);
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
Canvas canvas = holder.lockCanvas();
if (canvas != null) {
canvas.drawRGB(255, 255, 255);
holder.unlockCanvasAndPost(canvas);
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
});
В surfaceCreated()/surfaceChanged()
я рисую цвет.
Когда размер FrameLayout
, содержащего SurfaceView
, изменяется, вызывается обратный вызов surfaceDestroyed()
, и по умолчанию прозрачный фон показывается пользователю, пока surfaceCreated()
не вызывается снова.
Таким образом, пользователь на мгновение видит Прозрачный фон.
Мои вопросы:
- Использует ли
SurfaceView
цвет окнаActivity
для рисования растрового изображения по умолчанию? - Можем ли мы изменить
color
, которыйSurfaceView
использует для рисования растрового изображения по умолчанию?
SurfaceView#setZOrderMediaOverlay()
илиSurfaceView#setZOrderOnTop()
. Имейте в виду, что это поместит видео поверх всего, что означает, что вы не сможете накладывать Views поверх SurfaceView. Вторая идея состоит в том, чтобы установить фон на свой цвет, но затем установить его на ноль при вызовеonSurfaceCreated()
. Затем снова установите фон при вызовеonSurfaceDestroyed()
. - person DeeV   schedule 13.05.2016