2011-09-18 2 views
5

私はシームレスなビットマップを取り、世界座標を使用して任意の方向に画面上をスクロールする関数を持っています。 4つのドローがあります(プレイエリアはフルビットマップサイズよりも小さいので、せいぜいシームレス効果を保持するために描かれた異なるセクションだけで、ビットマップの4つのコピーが表示されます)。私が知りたいのは、rect境界に変更を加えると、画面上に表示される部分だけがブリッジされることです。それとも、Androidにそれを処理させるべきですか? もし私がそれを自分ですれば、どうしたらいいですか?世界が座標を合わせて翻訳すると、数学ができる限り私は本当に混乱します。 :/オフスクリーン描画を破棄するためにAndroidに依存する必要がありますか?

ここにコードがあります。

public void draw(Canvas canvas){ 

oCoords.x=(int) fX; 
oCoords.y=(int) fY; 

oTopLeft = gridContainingPoint(oCoords); 
oTopRight.x = gridContainingPoint(oCoords).x + iWidth; 
oTopRight.y = gridContainingPoint(oCoords).y; 
oBottomLeft.x = gridContainingPoint(oCoords).x; 
oBottomLeft.y = gridContainingPoint(oCoords).y + iHeight; 
oBottomRight.x = gridContainingPoint(oCoords).x + iWidth; 
oBottomRight.y = gridContainingPoint(oCoords).y + iHeight; 

canvas.save(); 
canvas.translate(-fX, -fY); 
oCloud.setBounds(oTopLeft.x, oTopLeft.y, oTopLeft.x + this.iImageWidth, oTopLeft.y + this.iImageHeight); 
oCloud.draw(canvas); 
oCloud.setBounds(oTopLeft.x + this.iImageWidth, oTopLeft.y, oTopLeft.x + (this.iImageWidth * 2), oTopLeft.y + this.iImageHeight); 
oCloud.draw(canvas); 
oCloud.setBounds(oTopLeft.x, oTopLeft.y + this.iImageHeight, oTopLeft.x + this.iImageWidth, oTopLeft.y + (this.iImageHeight * 2)); 
oCloud.draw(canvas); 
oCloud.setBounds(oTopLeft.x + this.iImageWidth, oTopLeft.y + this.iImageHeight, oTopLeft.x + (this.iImageWidth * 2),oTopLeft.y + (this.iImageHeight * 2)); 
oCloud.draw(canvas); 
canvas.restore(); 
} 

答えて

2

私は私はあなたが投稿したコードチャンクの詳細を理解していない、しかし、あなたが求めている場合はアンドロイドクリップは答えはイエスで自動的に画面の境界に描くありません。そのため、画面の一部を画面より小さくしたい場合を除き、ビットマップを描画するときに境界を設定する必要はありません。

関連する問題