2012-02-17 8 views
1

私たちは400x800キャンバスを持っており、点 P1(10,10)とP2(500000,800000)を結ぶ線を描きたいとします。 2番目の点はキャンバスの境界の外にあります。 canvas.darwLine(p1.x、p1.y、p2.x、p2.y、paint)を使用すると、アプリケーションがフリーズし、アプリケーションが使用できなくなります。 クリッピングを使用しても問題は解決しない場合、描画エンジンはまだ2番目の点までピクセルを描画しようとしていますアンドロイド上の2つの距離点の間に線を引く

提案や回避策はありますか?

+0

あなたのpoint2が400x800の範囲外になる場合は、ポイント2をP2(400,800)に変更してください。 – Vikram

+0

私は私の開発マシンではないのでテストできませんが、 'canvas。パス上に線を描き、 'canvas.drawPath()'を使って?clipRect() '? – CjS

答えて

2

P2が可視領域(この例では480x800)の外にある場合は、境界線との交点を計算し、次にP2の代わりに交点を使用します。

+0

Peterさん、ありがとうございました。私は、不必要に描かれないようにCanvas自体で実行できるアクションがあることを期待していました。数学の時間:) – Tyronne

0

あなたはこのようなもので、あなたのラインを縮小することができます

int maxX = 400; 
int maxY = 800; 

//Calculate how much we have to scale down to fit in the bounds: 
float scaleX = (maxX - p1.x)/p2.x; 
float scaleY = (maxY - p1.y)/p2.y; 

//Get the smallest scale, so that we fit in both axises. 
float scale = Math.min(scaleX, scaleY); 

//Only scale if we are scaling down. There is no need to make lines smaller than the screen scale up to the screen bounds: 
if(scale < 1.0f){ 
    p2.x *= scale; 
    p2.y *= scale; 
} 

私はこれを試していないので、私はそれが動作することを保証することはできません。

関連する問題