Recuperar coordenadas XY del punto central desde la selección

Lo que estoy tratando de hacer es permitir que el usuario de mi aplicación de Android para seleccionar puntos en la cara y recuperar las coordenadas X e Y de ese toque. Vea por favor la imagen abajo.

Coordenadas desde la cara

Quisiera que el usuario pudiera cambiar el tamaño del cuadrado de la selección.

Hasta ahora tengo el siguiente código, pero honestamente no tengo idea de dónde ir desde allí. ¿Cómo hago para dibujar un rectángulo que el usuario puede manipular y mover (y luego devolver las coordenadas de X y Y desde ese punto)? Estoy seguro de que hay una característica de Android para esto.

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

¡Gracias!

Podría ser útil: Cultivo de imágenes personalizadas de Android https://github.com/dtitov/pickncrop/blob/master/src/com/github/pickncrop/MainActivity.java

Bueno, si entiendo correctamente de acuerdo con su código que está utilizando un SurfaceView para dibujar dentro de él se puede leer la respuesta aceptada aquí donde dentro de private void drawMyStuff(final Canvas canvas) tienes que poner el código para dibujar los rectángulos que desea, y Call invalidate() para volver a dibujar el SurfaceView cada vez que cambie algo (como las coordenadas).

También puede crear su propia View personalizada y dibujar dentro de ella, puede ver un ejemplo de trabajo que estoy usando en mi proyecto aquí .

Usted ya tiene las coordenadas (x, y) del toque para dibujar los rectángulos dentro de su SurfaceView usando Canvas . Aquí algunos códigos que puede usar como referencia, todo lo que tiene que hacer es cambiar los números por las coordenadas (x, y) donde desea dibujar:

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

Ahora para cambiar el tamaño de su rectángulo tendrá que guardar las coordenadas en algún lugar, puede utilizar Rect para guardar las coordenadas de cada rectángulo que tiene. A continuación, para cambiar el tamaño de ellos puede leer las coordenadas de la pantalla táctil y ver si están cerca de algunas de sus rectángulos coordenadas. Digo cerca porque sería difícil tocar exactamente la coordenada de la esquina, hay que ver si es por ejemplo en + -10 píxeles alrededor de la esquina. Cuidar el tamaño del rectángulo tal vez esos 10 píxeles son el ancho o la altura del rectángulo.

Finalmente en ACTION_DOWN rastrea la esquina mientras escribo antes y en ACTION_UP tomas las nuevas coordenadas de la esquina que detectaste antes en ACTION_DOWN , entonces, llamas invalidate() para volver a dibujar tus rectángulos y ya está!

Espero que me haya entendido y le ayude de alguna manera 🙂

No estoy seguro de cuánto de la aplicación que ha hecho. Sin embargo, necesitará una manera de identificar el movimiento de los cuadrados versus el estiramiento de los cuadrados. Usted puede hacer esto por el botón o usted puede hacerlo en el diseño (movimiento del cuadrado del interior y estirar de límites).

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

Tendrá que buscar ejemplos de cómo redibujar los cuadrados. No estoy seguro de cómo los está dibujando en primer lugar.

EDIT: Aquí hay algunas fuentes útiles. Si usted combina los dos, usted debe ser fácilmente capaz de alcanzar su meta:

Mover imágenes con eventos táctiles

Android: ¿Cómo estirar una imagen al ancho de la pantalla mientras mantiene la relación de aspecto?

Ya que ya está recibiendo el punto de contacto, todo lo que puede hacer es dibujar un rectángulo o un cuadrado alrededor de él con el tamaño predeterminado

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

Luego, dependiendo del punto de contacto en el rectángulo, puede arrastrar o escalar el rectángulo.
Hay un tutorial de Google que puede utilizar para arrastrar y escalar el rectángulo.
A continuación encontrará el enlace.
http://developer.android.com/training/gestures/scale.html

  • Utilice diferentes colores para diferentes ActionBar.Tab
  • Undefined no es un objeto (evaluando '_reactNative.PropTypes.string') Error
  • React Native: Cambia la ruta de acceso del archivo de entrada index.android.js a la ruta del archivo personalizado especificado
  • ¿Cómo comprobar la contraseña de un EditView?
  • ¿Cómo agregar fuentes para diferentes pesos de fuente para el proyecto reactivo-androide?
  • Mi aplicación se desplaza muy mal después de importar la fuente roboto en la carpeta assets / fonts
  • Android Google Maps: ¿Cómo obtener el área que se muestra actualmente en el dispositivo de pantalla?
  • Guardar los datos de acceso (preferencias) android
  • Eclipse bloquea el acceso al proyecto -> propiedades -> ficha de Android
  • NoClassDefFoundError com.facebook.react.bridge.WritableNativeMap
  • En Android ¿cómo desconecto un socket?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.