2012-11-12 18 views
9

長方形のセットを描画する長いonDrawメソッドを実装しました。長方形は小さすぎるので、私はそれらを大きく見せたい。しかし残念ながら、データベースに格納されているので、四角形の座標は変更できません。では、canvas.scale()を使用してキャンバスを拡大する方法はありますか?canvas.scale関数を使用してキャンバスを拡大しますか?

+1

"残念ながら、データベースに格納されている矩形座標を変更することはできません。なぜですか? DBから座標を取得し、drawRectangle()の前に必要な倍率で乗算します。 – Simon

+0

私はその方法でズーム機能を実装できますか? – Ruby

+1

x = getValueFromDatabase()、y = getValueFromDatabase()、x = x * 5; y = y * 5; drawRectangle(x、y)そんなことに何が悪いの?私の要点は、なぜデータベースに格納された値を持つことで長方形をより大きく描くのをやめてしまうのでしょうか?理解できません。もちろん、四角形の座標を変更することができます。あなたはそれらをあなたが望むものにすることができます。 – Simon

答えて

18

私は0,0ですべてを描き、それを拡大縮小し、最終的に正しく動作するように変換する必要があると言ってこの回答を序文にします。

は、単にあなたのonDrawメソッドで次の操作を行います。

canvas.save(); 
    canvas.translate(xValue, yValue); 
    canvas.scale(xScale, yScale) 
    /* draw whatever you want scaled at 0,0*/ 
canvas.restore(); 

xScaleはは縮小またはX方向のストレッチは、 YSCALEは、Y方向に収縮やストレッチ。

がデフォルトです.2.0は2倍、0.5は2倍に縮小されます。

例:

canvas.save(); 
    canvas.translate(50, 50); 
    canvas.scale(0.5f, 0.5f); 
    canvas.drawRect(0.0, 0.0, 5.0, 5.0, paint); 
canvas.restore(); 

これは、長さ5.0、および5.0の幅を有する矩形を描く長さと幅2.5にそれを縮小し、その後(50、50)に移動します。

結果は、あなたがこれをしなかったかのように描かれた長方形になります

canvas.drawRect(50.0, 50.0, 52.5, 52.5, paint); 

私はこれが役に立てば幸い!

+0

しかし、異なる解像度のデバイスではスケール機能の動作が異なります。 – zionpi

+0

スケールは解像度の影響を受けません。これはピクセルについての話です。 –

+0

誰もがここに来て、ウェブのための解決策を探しています(=)。以下は改訂されたコード例です: 'context.translate(50、50); context.scale(0.5、0.5); context.fillRect(0.0、0.0、5.0、5.0); ' –

関連する問題