2011-12-24 10 views
1

ACTION_MOVEのタッチイベントでビューを拡大したいと思います。 when i drag orange square image according to that red ball should be resized. red bal resized from its center point to center of orange square image ooutput of image like this私はACTION_MOVEのビットマップをスケールしたいと思っています。

すべてのビットマップは正方形の形式です。 (point1 = top + left、point2 = top + right、point3 = bottom + left、point4 = bottom + right) 私は4つのポイントをすべて取得しました。 黄色のグリッパーをビットマップの上にドラッグすると、赤いボールのサイズがグリッドのサイズに応じて変更されます(グリッパーは任意の方向に動くことができます)。

私の質問: - >グリッパ中心点とビットマップ(左上+上端)point1の距離とビットマップに応じた縮尺を計算する方法を教えてください。

ビットマップを上端+左隅からドラッグし、point1、point2、point4のみからスケール/リサイズすることを意味します(右下がその位置にあります)。

- >私はビットマップを描くためにキャンバスを使用していますが、それはビットマップのスケール/回転を処理するための正しい方法ですか?

答えて

2

ACTION_UPのイベントACTION_DOWNおよびx '、y'座標のx、y座標を取得できます。 2つのポイントで、あなたはあなたの尺度を作ることができます(例えばユークリッド距離)。

gripper.setOnTouchListener(new OnTouchListener(){ 
    public boolean onTouch(View v, MotionEvent event) { 

     if(event.getAction() == android.view.MotionEvent.ACTION_DOWN){ 
      x1 = event.getX(); 
      y1 = event.getY(); 
     } 
     else if(event.getAction() == android.view.MotionEvent.ACTION_UP){ 
      x2 = event.getX(); 
      y2 = event.getY(); 
     }    
     return false; 
    }   
}); 

また左、getLeft()とビットマップの先頭位置、getTop()メソッドを取得します(これらの方法は、ビューの親のレイアウトに対する位置を返すことに注意してください)することができます。

createBitmapメソッドには、ビットマップのサイズを変更して、必要な解像度で保存できるMatrixパラメータがあります。どのようにhere(これは優れたチュートリアルです)を参照してください。あなたはおそらくすでにそれを行う方法を知っているでしょうが、とにかくそれを共有することには何の問題も見ません。

はそれが

+0

replying.createBitmap java.lang.IllegalArgumentExceptionがしてくれてありがとうを役に立てば幸い:X +幅は<= bitmap.width()は例外でなければならない、私はcreateScaledBitmapののfuctionを使用している、それが正常に動作しますが、私は縮尺ときに問題があります(再サイズ)ラウンドビットマップでは、アーク正方形のビットマップとしてスケールされます。任意のゾル。 ? uが言うよう –

+0

これは私が使用されるHVものである:ビットマップscaledBitmap = Bitmap.createBitmap(B、のgetX()、getY()表示、 // \t \t \t \t \t幅、高さ、マトリックス、TRUE)。 getX()とgetY()はキャンバス上の私の現在のビットマップ位置です。ごめんなさい。 –

+0

コードに間違いがあるようです。もう一度投稿したリンクを見てください。あなたは "Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg、0、0、bitmapOrg.width()、bitmapOrg.height、matrix、true)常に... "matrix.postScale((float newWidth)/ width)、(((float)newHeight)/ height))"のように、実際の希望するスケールを保持するパラメータは "matrix"パラメータです。コメントの書式は説明にはあまり役に立たないので、私が投稿したリンクで時間をとって、Matrixのパラメータで作業すればサイズを変更することができます。 – Alesqui

関連する問題