2013-06-26 24 views
5

私が目指しているのは、自分のAndroidアプリケーションのユーザーが顔のポイントを選択し、そのタッチからX座標とY座標を取得できるようにすることです。下の画像をご覧ください。選択から中心点XY座標を取得

Coordinates from face

私は、ユーザーが選択角の大きさを変更できるようにしたいと思います。

これまでのところ、私は以下のコードを持っていますが、そこからどこに行くのかは正直に分かりません。ユーザーが操作して移動できる矩形を描く(そしてXとYの中心座標を戻す)にはどうすればいいですか? I'm sure there's an Android feature for this.

private void selectImg(){ 
    //retrieve X and Y values from touch 
    surfaceView.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View view, MotionEvent pos) { 
      //retrieve position when user finishes touch 
      if (pos.getAction() == MotionEvent.ACTION_UP){ 
        Log.d("X",String.valueOf(pos.getX())); 
        Log.d("Y",String.valueOf(pos.getY())); 
      } 
      return true; 
     } 
    });  
} 

ありがとうございます!

は役に立つかもしれません: Custom Android Image Crop https://github.com/dtitov/pickncrop/blob/master/src/com/github/pickncrop/MainActivity.java

+0

あなたは結果画像を投稿することができ、その後どのように結果がつもりのように見えるのですか? – KOTIOS

答えて

1

私はあなたのコードに応じて、あなたがそれの内側に描画するSurfaceViewを使用している正しく理解していれば、あなたがprivate void drawMyStuff(final Canvas canvas)の内側にあなたが欲しい四角形を描画するコードを配置する必要が受け入れ答えhereを読むことができ、かつ何か(座標など)を変更するたびにinvalidate()に電話してSurfaceViewを再描画してください。

また、独自のカスタムViewを作成してその中に描画すると、私のプロジェクトで使用している実例を見ることができますhere

Canvasを使用してSurfaceView内の四角形を描画するには、すでにタッチの(x、y)座標があります。ここではいくつかのコードを使用して、参照用に使用することができ、あなたがしなければならないすべては、あなたが描くしたい場所の座標(x、y)で番号を変更です:

Paint paint = new Paint(); 
paint.setColor(Color.BLACK); 
paint.setStrokeWidth(3); 
canvas.drawRect(30, 30, 80, 80, paint); 
paint.setStrokeWidth(0); 
paint.setColor(Color.CYAN); 
canvas.drawRect(33, 60, 77, 77, paint); 
paint.setColor(Color.YELLOW); 
canvas.drawRect(33, 33, 77, 60, paint); 

今、あなたは保存する必要がありますあなたの四角形のサイズを変更します座標がどこかにある場合は、Rectを使用して、それぞれの四角形の座標を保存できます。次にそれらのサイズを変更するには、タッチスクリーンから座標を読み取り、それらが長方形の座標の近くにあるかどうかを確認します。コーナーのコーディネートに正確に触れるのが難しいので、近くで言うと、コーナーの周りに+ -10ピクセルであるかどうかを確認する必要があります。矩形のサイズは、その10ピクセルが矩形の幅または高さである可能性があることに注意してください。あなたACTION_DOWNの最後に

私は前に書いてACTION_UPにあなたは、あなたがあなたの四角形を再描画するinvalidate()を呼び出し、作業が完了し、あなたがACTION_DOWNに前に検出されたコーナーの新しい座標を取るとコーナーを追跡!私が選択した黄色の矩形である。このイメージが大きな作れば

私はあなたが私を理解し、いくつかの方法であなたを助け願っています:)

4

私はあなたが行っているどのくらいのアプリのか分かりません。しかし、正方形を動かすか正方形を伸ばすかを識別する方法が必要です。あなたはボタンでこれを行うことができますし、デザイン上で行うこともできます(四角形の内側から移動し、境界から伸びる)。

@Override 
    public boolean onTouch(View view, MotionEvent pos) { 
     //retrieve position when user finishes touch 
     if (pos.getAction() == MotionEvent.ACTION_UP){ 
       Log.d("X",String.valueOf(pos.getX())); 
       Log.d("Y",String.valueOf(pos.getY())); 
     } 
     //pseudo code 
     //if user is dragging 
      //get new dragged position 
      //if boundaries are being dragged 
       //redraw square to match new dragged position (requires some math to stretch properly) 
      //else if inside boundaries being dragged 
       //redraw the square to new dragged position (center it) 

     return true; 
    } 

四角形を再描画する方法の例を調べる必要があります。私はあなたが最初にそれらをどのように描いているのか分かりません。

編集:ここにいくつかの有用な情報源があります。あなたは2を組み合わせた場合、あなたの目標を達成するために簡単にできるようにする必要があります

Moving image with touch events

Android: How to stretch an image to the screen width while maintaining aspect ratio?

2

すでにタッチのポイントを取得しているので、あなたが行うことができ、すべての周りの長方形または正方形を描画していますデフォルトサイズの場合

Point touchPoint=new Point(x, y); 
Paint paint = new Paint(); 
paint.setColor(Color.parseColor("#00CCFF")); 
canvas.drawRect(x, y, x+100, y+100, paint); 

次に、四角形の接触点に応じて、四角形をドラッグまたは拡大縮小することができます。
長方形をドラッグして拡大縮小するためのGoogleチュートリアルがあります。
以下をご覧ください。
まあ http://developer.android.com/training/gestures/scale.html

関連する問題