2013-02-14 83 views
0

我有一個擴展SurfaceView(Android應用程序API級別8)的活動。需要將位圖繪製爲背景而不是簡單的顏色。我能夠在畫布上繪製位圖 - >使用void render(Canvas canvas)中的註釋代碼,但是它使性能太低。在SurfaceView上渲染位圖會影響性能

如果我們使用位圖,渲染變得很慢,但是如果我們只是繪製顏色,那麼一切都很好。

代碼有問題嗎?我們如何設置背景圖片而不影響性能?

public class MainGamePanel extends SurfaceView implements 
     SurfaceHolder.Callback { 
public void render(Canvas canvas) { 


     canvas.drawColor(Color.WHITE); 
     /* 
     Rect dest = new Rect(0, 0, getWidth(), getHeight()); 
     Paint paint = new Paint(); 
     paint.setFilterBitmap(true); 

     Bitmap myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.background_play); 
     canvas.drawBitmap(myBitmap, null, dest, paint); 
     */ 
     droid.draw(canvas); 
    } 
} 

回答

2

也許你應該創建位圖作爲一個字段和渲染方法()喜歡它的外面解碼:

public class MainGamePanel extends SurfaceView implements 
    SurfaceHolder.Callback { 

    private Bitmap myBitmap; //creating a field 

    public MainGamePanel() { 

     myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.background_play); //decode bitmap in constructor 

    } 

    public void render(Canvas canvas) { 


    canvas.drawColor(Color.WHITE); 

    Rect dest = new Rect(0, 0, getWidth(), getHeight()); 
    Paint paint = new Paint(); 
    paint.setFilterBitmap(true); 

    canvas.drawBitmap(myBitmap, null, dest, paint); //draw your bitmap 

    droid.draw(canvas); 
    } 
} 
+0

Z.謝謝,它的工作以及 – RDX 2013-02-15 05:04:27

+0

除了初始化噴漆的對象之外的渲染會提高性能。正如開發網站所言。 – 2013-09-24 05:20:52