キャンバス上の画像にピンチ ズーム イン/アウト機能とドラッグ アンド ドロップ機能を実装することに成功しました。
今私が欲しいのはサイズ変更です。iPhoneアプリに基づいた以下のリンクのような画像
では、どうすればそのような機能を Android で実現できますか?
キャンバス上の画像にピンチ ズーム イン/アウト機能とドラッグ アンド ドロップ機能を実装することに成功しました。
今私が欲しいのはサイズ変更です。iPhoneアプリに基づいた以下のリンクのような画像
では、どうすればそのような機能を Android で実現できますか?
基本的には画像を無効にして最初からキャンバスに描き直す必要があります::
img=(ImageView)findViewById(R.id.yourimageidfromxml);
img.onTouchEvent(MotionEvent me)
{
int X=me.getX();
int Y=me.getY();
img.invalidate();
img.repaint(X,Y);
}
void paint(int X,int Y)
{
img.setWidth(X);
img.setHeight(Y);
}
スケーリング画像は、最初からキャンバスに再描画を使用して変換されます
サイズ変更によって、ビットマップを垂直および水平面に「引き伸ばす」ことを参照している場合は、形状 (楕円など) が描画されている四角形を変更するだけです。
例えば:
これは、楕円の元の形状です。
canvas.drawOval(new Rect(0,0,100,100), bluePaint);
これは同じ楕円形で、水平面上で引き伸ばされた (サイズ変更された) だけです。
canvas.drawOval(new Rect(0,0,200,100), bluePaint);
これが役立つことを願っています。
2 つのオプションがあり、どちらもカスタム ビューに関係しています。1 つ目は、「キャンバス」を満たすカスタム ビューを作成することです。ビュー内の 8 つの青の円と 1 つの緑の円をオブジェクトとして追跡できRect
ます。オーバーライドonTouchEvent(MotionEvent)
してから、モーションイベントがコントロールにあるかどうかを確認し、それに応じて更新します(ここでは少し単純化しています:))。onTouchEvent から を呼び出しますinvalidate()
。次に、コントロールの描画を処理し、 onDrawonDraw(Canvas)
への最後の呼び出し以降にコントロールがどのように変更されたかに従って画像を更新できます。
もう 1 つのオプションは、同様のことを行うことですが、円とコントロールのみをカプセル化するビューを使用します。つまり、ビューを移動するには、ビューのレイアウト パラメーターを変更できるコンテナーが必要になります。これを行うと、ビューのサイズと位置を再計算する必要があるため、onTouchEvent メソッドはそのレイアウト ビューで無効化をトリガーする必要があります。これは間違いなく難しいでしょうが、達成しようとしているものによっては、個々のビューで作業する方が、単一のビューでコード内の円の表現を維持するよりも優れている場合があります。
画像のサイズ変更は、scaleType "fitXY" を指定した単純な ImageView を使用して行うことができます。
青いサイズ変更ハンドルを自分で追加する必要があります。
画像 (緑色のハンドル) の回転を変更するには、次を使用します。
public static Bitmap rotate(Bitmap src, float degree) {
// create new matrix
Matrix matrix = new Matrix();
// setup rotation degree
matrix.postRotate(degree);
// return new bitmap rotated using matrix
return Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), matrix, true);
}
ソース: http://xjaphx.wordpress.com/2011/06/22/image-processing-rotate-image-on-the-fly/
その他の Android 画像処理の例については、http: //xjaphx.wordpress.com/learning/tutorials/を参照してください。