Coordenadas de recorte de Android

Quiero recortar una imagen de la galería o cámara y también obtener las coordenadas de recorte X e Y para la imagen original, no la recortada.

Necesito estas coordenadas para poder usarlas en una solicitud POST, donde envío la imagen original y las coordenadas del cultivo.

¿Cómo hago esto?

Debe utilizar una clase DragRectView para leer todo el evento de toque y el evento de movimiento y, a continuación, dibujar un rectángulo en una lona. Con la función onTouchEvent puede obtener las coordenadas de los valores X e Y.

import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Rect; import android.text.TextPaint; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; public class DragRectView extends View { private Paint mRectPaint; private int mStartX = 0; private int mStartY = 0; private int mEndX = 0; private int mEndY = 0; private boolean mDrawRect = false; private TextPaint mTextPaint = null; private OnUpCallback mCallback = null; public interface OnUpCallback { void onRectFinished(Rect rect); } public DragRectView(final Context context) { super(context); init(); } public DragRectView(final Context context, final AttributeSet attrs) { super(context, attrs); init(); } public DragRectView(final Context context, final AttributeSet attrs, final int defStyle) { super(context, attrs, defStyle); init(); } public void setOnUpCallback(OnUpCallback callback) { mCallback = callback; } private void init() { mRectPaint = new Paint(); mRectPaint.setColor(getContext().getResources().getColor(android.R.color.holo_gr een_light)); mRectPaint.setStyle(Paint.Style.STROKE); mRectPaint.setStrokeWidth(5); mTextPaint = new TextPaint(); mTextPaint.setColor(getContext().getResources().getColor(android.R.color.holo_gr een_light)); mTextPaint.setTextSize(20); } @Override public boolean onTouchEvent(final MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mDrawRect = false; mStartX = (int) event.getX(); mStartY = (int) event.getY(); invalidate(); break; case MotionEvent.ACTION_MOVE: final int x = (int) event.getX(); final int y = (int) event.getY(); if (!mDrawRect || Math.abs(x - mEndX) > 5 || Math.abs(y - mEndY) > 5) { mEndX = x; mEndY = y; invalidate(); } mDrawRect = true; break; case MotionEvent.ACTION_UP: if (mCallback != null) { mCallback.onRectFinished(new Rect(Math.min(mStartX, mEndX), Math.min(mStartY, mEndY), Math.max(mEndX, mStartX), Math.max(mEndY, mStartX))); } invalidate(); break; default: break; } return true; } @Override protected void onDraw(final Canvas canvas) { super.onDraw(canvas); if (mDrawRect) { canvas.drawRect(Math.min(mStartX, mEndX), Math.min(mStartY, mEndY), Math.max(mEndX, mStartX), Math.max(mEndY, mStartY), mRectPaint); canvas.drawText(" (" + Math.abs(mStartX - mEndX) + ", " + Math.abs(mStartY - mEndY) + ")", Math.max(mEndX, mStartX), Math.max(mEndY, mStartY), mTextPaint); } } } 

Y este será el método principal:

 import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Rect; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { private static final String TAG = "MainActivity"; Bitmap Imag; ImageView view; TextView text; int picw, pich; int pix[]; int x1, x2, y1, y2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final DragRectView view2 = (DragRectView) findViewById(R.id.dragRect); Imag = BitmapFactory.decodeResource(getResources(), R.drawable.rgb); picw = Imag.getWidth(); pich = Imag.getHeight(); view = (ImageView) findViewById(R.id.image); view.setImageBitmap(Imag); text = (TextView) findViewById(R.id.tex); pix = new int[picw * pich]; if (null != view2) { view2.setOnUpCallback(new DragRectView.OnUpCallback() { @Override public void onRectFinished(final Rect rect) { x1 = rect.left; y1 = rect.top; x2 = rect.right; y2 = rect.bottom; Toast.makeText(getApplicationContext(), "Coordenadas (" + x1 + ", " + y1 + ", " + x2 + ", " + y2 + ")", Toast.LENGTH_LONG).show(); } }); } } } 

Respuesta de lockdawn trabajado para mí, pero tuve que corregir esta línea …

 Math.max(mEndX, mStartX), Math.max(mEndY, mStartX))); 

Creo que la línea debe ser:

 Math.max(mEndX, mStartX), Math.max(mEndY, mStartY))); 
  • Honeycomb (3.1) adjustResize ya no funciona?
  • Efecto de desvanecimiento entre los diseños
  • Sensor de Android: getRotationMatrix () devuelve valores erróneos, ¿por qué?
  • Atajo de hardware para tomar una captura de pantalla
  • Alerta de proximidad para ubicaciones guardadas en el servidor
  • Enlace compartido en WhatsApp desde el sitio web móvil (no en la aplicación) para Android
  • En seguridad de facturación de aplicaciones
  • Facturación en la aplicación de Android: Security.java dice "Error en la verificación de la firma"
  • Servicio de accesibilidad de Android en pantalla
  • Cómo restringir los intentos de Android o agregar seguridad
  • Por qué getWindow (). SetSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); No funciona en modo horizontal?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.