您好我正在制作游戏,其中包含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?"
或任何其他更好的解决方案。 。
先谢谢..
答案 0 :(得分:7)
您可以查看的一种可能性是检索View's
绘图缓存Bitmap
并将Bitmap
添加到游戏内容后面的SurfaceView
。
检索Bitmap
:
myVisualizerView.setDrawingCacheEnabled(true);
mVisualizerBitmap = Bitmap.createBitmap(myVisualizerView.getDrawingCache());
myVisualizerView.setDrawingCacheEnabled(false);
在SurfaceView的Bitmap
:
onDraw(...)
canvas.drawBitmap(mVisualizerBitmap, //other params);
如果您必须在游戏的每一帧都检索位图,我不确定这在性能方面是一个好主意,但它值得探索。
答案 1 :(得分:1)
尝试使用LinearLayout添加它们, 并使用以下方法将它们叠加在一起:
android:layout_alignLeft="..."
android:layout_alignTop="..."