Получить координаты центральной точки XY от выбора

То, что я собираюсь сделать, – позволить пользователю моего приложения 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

Ну, если я правильно понимаю ваш код, вы используете SurfaceView чтобы рисовать внутри него, вы можете прочитать принятый ответ здесь, где внутри private void drawMyStuff(final Canvas canvas) вы должны поместить код, чтобы нарисовать private void drawMyStuff(final Canvas canvas) прямоугольники, и Call 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() чтобы перерисовать ваши прямоугольники, и все готово!

Надеюсь, вы поняли меня и помогли вам каким-то образом 🙂

Я не уверен, сколько из приложения вы сделали. Тем не менее, вам понадобится способ определить перемещение квадратов и растягивание квадратов. Вы можете сделать это с помощью кнопки или вы можете сделать это по дизайну (перемещение изнутри квадрата и растяжение с границ).

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

Вам нужно посмотреть примеры того, как перерисовывать квадраты. Я не уверен, как вы их рисуете в первую очередь.

EDIT: Вот некоторые полезные источники. Если вы объедините два, вы должны легко достичь своей цели:

Перемещение изображения с сенсорными событиями

Android: Как растянуть изображение до ширины экрана при сохранении пропорций?

Поскольку вы уже получаете точку касания, все, что вы можете сделать, это нарисовать прямоугольник или квадрат вокруг него с размером по умолчанию

 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