5

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

顔からの座標

ユーザーが選択四角形のサイズを変更できるようにしたいと思います。

これまでのところ、以下のコードがありますが、正直なところ、そこからどこに行くべきかわかりません。ユーザーが操作および移動できる長方形を描画するにはどうすればよいですか (そして、そこから X および Y 中心点の座標を返します)。これにはAndroidの機能があると確信しています。

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;
        }
    });     
}

ありがとうございました!

役に立つかもしれません: カスタム Android 画像クロップ https://github.com/dtitov/pickncrop/blob/master/src/com/github/pickncrop/MainActivity.java

4

3 に答える 3

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 つを組み合わせると、簡単に目標を達成できるはずです。

タッチイベント付き動画

Android:アスペクト比を維持しながら画像を画面幅に引き伸ばす方法は?

于 2013-07-01T15:54:17.490 に答える
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

于 2013-07-04T12:47:35.747 に答える
1

あなたのコードに従って正しく理解している場合は、その中に描画するために a を使用しています。ここSurfaceView受け入れられた回答を読むことができます。ここで、必要な長方形を描画するコードを配置し、何かを変更するたびに(座標のように)。private void drawMyStuff(final Canvas canvas)invalidate()SurfaceView

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

タッチの (x,y) 座標は既にあるので、SurfaceViewを使用して内部に長方形を描画しますCanvas。参照用に使用できるコードを次に示します。必要なのは、描画する場所の (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前に検出した角の新しい座標を取得します。次に、長方形を再描画するためACTION_DOWNに呼び出し、完了です!invalidate()

あなたが私を理解し、何らかの形であなたを助けてくれることを願っています:)

于 2013-07-07T19:19:18.217 に答える