2013-06-03 21 views
6

Xin chào, tôi hiện đang làm việc trên Trò chơi có chứa VIEW hình ảnh hóa hiệu ứng tần số âm thanh trong nền của SurfaceView.Làm cách nào để thêm chế độ xem làm nền cho SurfaceView?

The surfaceView contains actual game play.

tôi đăng một số đoạn mã: -

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 được tạo ra như sau -

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 My chạy tốt vậy làm thế nào tôi có thể thêm này làm nền để SurfaceView (thực tế chạy game) .Tôi đang bị mắc kẹt trên các vấn đề mà "How to add VIEW as background of surfaceView?" Hoặc bất kỳ một giải pháp tốt hơn cho điều đó .. Thx trước ..

+0

xem không thể được thêm vào như là nền. Bạn phải đặt chế độ xem nội dung hoạt động của mình là – Blackbelt

Trả lời

7

Một khả năng bạn có thể xem là truy xuất bộ nhớ cache View's vẽ Bitmap và thêm Bitmap vào SurfaceView, được vẽ phía sau nội dung trò chơi của bạn.

Lấy Bitmap:

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

Vẽ Bitmap trong onDraw(...) SurfaceView của:

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

Tôi không chắc chắn đây là một ý tưởng tuyệt vời về hiệu suất nếu bạn có để lấy bitmap mọi khung hình của trò chơi của bạn nhưng nó có thể đáng để khám phá.

+0

Cảm ơn Gunnar đã trả lời nhưng điều này không tốt cho hình ảnh âm thanh thời gian thực ... Nhưng tôi thực sự ấn tượng với ý tưởng của bạn. –

+0

Bạn đã xem xét điều này chưa: http://stackoverflow.com/questions/5391089/how-to-make-surfaceview-transparent -? –

+0

Tôi nhận được giải pháp từ liên kết này http://stackoverflow.com/a/15873927/2123594. Nhưng câu trả lời được đề xuất của bạn cũng tốt. Cảm ơn.. –

1

cố gắng thêm chúng bằng cách sử LinearLayout, và làm cho họ trên đầu trang của mỗi khác sử dụng:

android:layout_alignLeft="..." 
android:layout_alignTop="..."