2017-11-29 11 views
0

私はキャンバスを使用してAndroidプロジェクトを開発していますが、スケーリングの問題があります。よりシンプルにするために、例を使用します。Androidでのキャンバスのスケーリング

私のビューは、幅1300ピクセル、高さ800ピクセルと仮定しましょう。静的な幅1300ピクセルになるキャンバスを内側に置きますが、高さは変数です。私のキャンバスが> 800pxなのでキャンバスがビューから外れるので、canvas.scale()を使用しようとしていましたが、スケール内に入れる正確な値を計算する方法はわかりません!

アイデア?

+0

質問が正しく表示されているかどうかわかりません。あなたが 'canvas.scale(xScale、yScale)'を呼び出すときにyScale因子をどれだけ設定したいかについては不明ですか?また、キャンバスのサイズを常にデバイスの幅と高さと同じにしますか? –

答えて

0

私個人的には、新しいCanvasを作成する必要があります。これを行うには、まずビットマップのサイズを変更する必要があります。以下の方法を使用して、ビューのサイズとビットマップのサイズの間のスケールを計算します。

public static float computeScale(float w1, float h1, float w2, float h2) { 
    if (w1 > 0 && h1 > 0 && w2 > 0 && h2 > 0) { 
     return Math.max(w1/w2, h1/h2); 
    } 

    return 1; 
} 

だから、規模や新しいビットマップの幅は、高さは以下のコードで計算されます。

float scale = computeScale(viewWidth, viewHeight, bitmapWith, bitmapHeight); 
if(scale > 1){ 
    int newWidth = Math.round(bitmapWidth/scale); 
    int newHeight = Math.round(bitmapHeight/scale); 
} 

// The code for resizing the source bitmap with the newWidth and newHeight. 
// Bitmap newBitmap = ...; 

最後に、あなたは新しいCanvasを作成するために、新しいビットマップを使用します。

Canvas canvas = new Canvas(newBitmap); 
関連する問題