Как добавить представление в качестве фона в SurfaceView?

Привет, в настоящее время я работаю над игрой, которая содержит VIEW визуализации эффекта звуковой частоты на фоне SurfaceView.

The surfaceView contains actual game play.

Я отправляю некоторые фрагменты кода: -

main.xml

<FrameLayout
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_margin="5dp"
    android:layout_weight="1"
    android:background="#000" >

    <co.ardor.visualizer.VisualizerView
        android:id="@+id/visualizerView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
    </co.ardor.visualizer.VisualizerView>
</FrameLayout>

Visualizer view создаются следующим образом:

public class VisualizerView extends View
{
  private static final String TAG = "VisualizerView";

  private byte[] mBytes;
  private byte[] mFFTBytes;
  private Rect mRect = new Rect();
  private Visualizer mVisualizer;
  private Set<Renderer> mRenderers; // type of Renderer class

  private Paint mFlashPaint = new Paint(); // for flash paint
  private Paint mFadePaint = new Paint(); // for fade paint

  public VisualizerView(Context context, AttributeSet attrs, int defStyle)
  {
    super(context, attrs);
    init();
 }

  public VisualizerView(Context context, AttributeSet attrs)
 {
    this(context, attrs, 0);
 }

  public VisualizerView(Context context)
  {
   this(context, null, 0);
  } 

  // Some code regarding to the audio visualization..
}

Мой VisualizerView работает хорошо, так что как я могу добавить это в качестве фона в SurfaceView (фактически работающая игра). Я застрял в проблеме, которая "How to add VIEW as background of surfaceView?" Или любое другое лучшее решение для этого.. Спасибо заранее..


person Swapnil Sonar    schedule 03.06.2013    source источник
comment
Представления не могут быть добавлены в качестве фона. Вы должны установить его как представление содержимого вашей деятельности.   -  person Blackbelt    schedule 07.06.2013


Ответы (2)


Одна из возможностей, на которую вы могли бы обратить внимание, — это получить View's кеш чертежей Bitmap и добавить Bitmap к SurfaceView, нарисованным за содержимым вашей игры.

Получить Bitmap:

myVisualizerView.setDrawingCacheEnabled(true);
mVisualizerBitmap = Bitmap.createBitmap(myVisualizerView.getDrawingCache());
myVisualizerView.setDrawingCacheEnabled(false);

Нарисуйте Bitmap в SurfaceView onDraw(...):

canvas.drawBitmap(mVisualizerBitmap, //other params);

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

person onosendai    schedule 08.06.2013
comment
Спасибо, Гуннар, за ответ, но это не очень хорошо для визуализации звука в реальном времени... Но ваша идея меня очень впечатлила. - person Swapnil Sonar; 14.06.2013
comment
Вы смотрели на это: stackoverflow.com/questions /5391089/ - ? - person onosendai; 14.06.2013
comment
Я получил решение по этой ссылке stackoverflow.com/a/15873927/2123594. Но предложенный вами ответ тоже хорош. Спасибо.. - person Swapnil Sonar; 14.06.2013

попробуйте добавить их с помощью LinearLayout и сделать их друг над другом, используя:

android:layout_alignLeft="..."
android:layout_alignTop="..."
person Taldroid    schedule 09.06.2013