2011-08-15 14 views
0

私は新しいプロジェクトを開始していますが、これまではCanvasに描画された画像を持つ簡単なアプリを作っています。このアプリは指で画面をドラッグできます。ゲームのために多くのものをこのCanvasに描くことです。しかし、ドラッグは非常に遅く、画面をドラッグすると画面が2〜3回/秒で更新されます。それは非常に遅いので、私はそれが非常に間違っていると推測している(私はNexus Sにいる)。ドラッグ可能な背景を作る良い方法はありますか?

私はアプリケーションの非常にベアボーンしか持っていません。この1つの画像でCanvasを更新するスレッドを含むSurfaceViewだけです。コードは次のとおりです。

// In GameThread 

private void doDraw(Canvas c) { 
    if(canvasInit){ 
     Bitmap background = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.bg); 
     c.drawBitmap(background, offsetX, offsetY, null);   
    } 
} 


public boolean doTouchDown(MotionEvent event) { 
    if(drag == false){ 
     //initialize drag 
     startX = event.getX(); 
     startY = event.getY(); 
     drag = true; 
    }else{ 
     //caluclate new position 
     offsetX = Math.max(Math.min(0, offsetX + (event.getX() - startX)), mCanvasWidth - BACKGROUND_WIDTH); 
     offsetY = Math.max(Math.min(0, offsetY + (event.getY() - startY)), mCanvasHeight- BACKGROUND_HEIGHT); 
     startX = event.getX(); 
     startY = event.getY(); 
    } 
    return true; 
} 

public boolean doTouchUp(MotionEvent event){ 
    drag = false; 
    return true; 
} 

答えて

1

描画するたびにビットマップを読み込んでいるようです。リソースの読み込みを、ある種の初期化メソッド/ SurfaceViewコンストラクタに移動し、パフォーマンスを比較することができますか?

Bitmap background; 
... 

private void init() { 
    ... 
    background = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.bg); 
    ... 
} 

private void doDraw(Canvas c) { 
    if(canvasInit){ 
     c.drawBitmap(background, offsetX, offsetY, null);   
    } 
} 
1

私は問題はすべてのDrawあなたが新しいビットマップを作成し、doDraw方法であると考えて、それはdoDraw方法で参照すると、お使いのxとyを使用して、それを描きますConstructorでこのBitmapをロードしてみてください。

関連する問題