Surfaceviewとキャンバス描画を使用してAndroidでカスタムコンポーネントを作成しようとしています。コンポーネントは、タッチすることでサイズ変更および回転可能です。画像ビューを作成することを検討してください。その上、右、下、および左のエッジは、必要なエッジをタッチしてドラッグすることでスケーラブルです。コンポーネントの境界を維持するために使用しています。RectF
回転にはcanvas.rotate(angle, bounds.centerX(),bounds.centerY())
メソッドを使用しています。問題は、上端のサイズ変更中に、Let、Right、およびBottomエッジを修正する必要があり、回転角が0度以外の場合は修正できません。実際の長方形の境界に対して回転した長方形のx、y座標を見つけるには、数学的な解決策が必要です。
私はいくつかの画像の助けを借りてそれを説明することができます。次の図は、境界も既知であり、それぞれの色で表示されている2つの長方形を示しています。Green Rectを、コンポーネントの初期境界と見なします。-45度回転し、中心は(10,10)です。次に、長方形の上端のサイズを変更して、次の図2に表示します。
図2から、Y位置が6から4に減少していることがわかります。回転した長方形もピンク色で表示されます。コンポーネントが回転角-45度のときにサイズ変更を行っていることを思い出してください。したがって、上端の長方形の左、右、および下の位置をドラッグしている間は変更しないでください。したがって、図2のピンクの長方形は、図1の緑の長方形と同じ左、右、および下の座標を持つ必要があります。得られた長方形と予想される長方形の比較を図3に示します。
図3では、黄色の長方形が期待される/必要な出力です。得られた長方形のピンク色は、緑色の回転した長方形に比べて上にシフトしており、回転角によって変化します。
- 回転角=-45度です
- 実際の(サイズ変更されていない)長方形の境界。
- 回転=-45度での実際の(サイズ変更されていない)長方形の境界。
- サイズ変更された長方形の境界。
- 回転でのサイズ変更された長方形の境界=-45度。
黄色い長方形の境界/中心を計算するにはどうすればよいですか。コンポーネントのサイズ変更を正しく実装できるようにするには?適用できる数学はありますか?
必要なポイント/座標は、図3で赤い円でマークされています。