私のAndroidアプリケーションで問題が発生し、何もうまくいかないようです。相対レイアウト内の別の ImageView の上に ImageView があります。ユーザーがコーナーの1つに触れてドラッグしたときに、上部のイメージビューのサイズを変更する必要があります。私たちがよく目にするクロッピングフレームのように。いずれかの角をドラッグすると、対角線の反対側の角が固定されたままになり、ドラッグされている角全体でサイズ変更を行う必要があります。私がやっていることは、OnTouchListener を設定し、Action.MOVE で新しい/ドラッグされた座標を取得してから、Bitmap の createScaledBitmap を使用してサイズを変更しようとしました。これにより、画像ビューのサイズが変更されますが、ドラッグされているコーナーは変更されません。私は完全に混乱しています。Canvas を使用して長方形を描画するときと同じように、座標を使用して Image View を描画する方法。助けてください。
1 に答える
私は ImageView ではこれを行いません。View をサブクラス化し、onTouchEvent と onDraw をオーバーライドして、入力を処理し、さまざまなコンポーネントをすべて描画します。これをコンポーネントに分解し、このビューで多数のオブジェクトを管理する必要があります。
トリミング領域のサイズを表す Rect があります。これはおそらく、デフォルトでコントロールのサイズになります。onTouchEvent では、各コーナーの周りの領域をテストし、ドラッグされているコーナーを追跡して Rect を適切にサイズ変更する必要があります。
描画するたびに createScaledBitmap を呼び出す必要はありません。また、その時点で OutOfMemoryException をいじっているので、おそらくそうすべきではありません (ビットマップのクリーンアップが遅すぎると、これが何であるかを理解するのが難しい方法になります)。 . コントロールが作成されたときに Bitmap をデコードし、目的の Rect を使用してキャンバスに描画します。
書くコードはたくさんありますが、楽しいプロジェクトのように思えます。このようなコントロールをドロップする簡単な方法はありません (私の理解が正しければ)。カスタム ビュー内のタッチ、ドラッグ、および移動先の四角形を管理する必要があります。