Recortar y agrandar imagen sin mover la superposición Ver en cambio mover la imagen en ImageView

Hola quiero recortar la imagen sin mover la vista de superposición en lugar de mover la imagen. Introduzca aquí la descripción de la imagen

La imagen se puede mover por todas partes. Me gustaría recortar y guardar el área resaltada como se muestra a continuación dentro del borde negro.

Tengo ImageView con android:scaleType="matrix"

Aquí está mi código de diseño

 <RelativeLayout android:id="@+imageEdit/rl_ScaleImage" android:layout_width="match_parent" android:layout_height="fill_parent" android:layout_below="@+imageEdit/Topbar" android:visibility="visible" > <ImageView android:id="@+imageEdit/imageView1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_alignParentLeft="true" android:scaleType="matrix" /> <View android:id="@+imageEdit/viewTop" android:layout_width="fill_parent" android:layout_height="50dp" android:layout_alignParentTop="true" android:background="#99000000" /> <View android:id="@+imageEdit/view_scaledImage" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_above="@+imageEdit/viewBottom" android:layout_below="@+imageEdit/viewTop" android:background="@drawable/rounded_corner_small" /> <View android:id="@+imageEdit/viewBottom" android:layout_width="fill_parent" android:layout_height="150dp" android:layout_alignParentBottom="true" android:background="#99000000" /> </RelativeLayout> 

ImageView tiene OnTouchListener . La imagen se puede ampliar o alejar y también se puede mover en ImageView1 . View view_scaledImage es el área que quiero recortar y guardar. ¿Cómo hago esto?

Finalmente conseguí la solución combinando la biblioteca de Cropper y las bibliotecas de PhotoView.

https://github.com/rameshkec85/AndroidCropMoveScaleImage

Puede utilizar la biblioteca de cropimage . Agregue esta línea a su archivo de manifiesto:

  <activity android:name="eu.janmuller.android.simplecropimage.CropImage" /> 

Seleccione la imagen de la galería o cámara y llame a esta función:

 public void runCropImage(String path) { Intent intent = new Intent(this, CropImage.class); intent.putExtra(CropImage.IMAGE_PATH, path); intent.putExtra(CropImage.SCALE, true); intent.putExtra(CropImage.ASPECT_X, 2);//change ration here via intent intent.putExtra(CropImage.ASPECT_Y, 2); startActivityForResult(intent, REQUEST_CODE_CROP_IMAGE);//final static int 1 } 

Y en su onActivityResult :

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { // gallery and camera ommitted case REQUEST_CODE_CROP_IMAGE: String path = data.getStringExtra(CropImage.IMAGE_PATH); // if nothing received if (path == null) { return; } // cropped bitmap Bitmap bitmap = BitmapFactory.decodeFile(path); imageView.setImageBitmap(bitmap); break; default: break; } } 

Esta biblioteca también tiene funcionalidad de zoom. Revise el ejemplo en el enlace que mencioné

De esta manera puede obtener las coordenadas de cualquier vista en relación con la ventana actual:

 public Rect getViewPositionRelative(View v) { //Locate on screen int[] location = new int[2]; view.getLocationInWindow(location); //change to getLocationOnScreen(location) for an absolute positioning Rect rect = new Rect(); rect.left = location[0]; rect.top = location[1]; rect.right = rect.left + v.getWidth(); rect.bottom = rect.top + v.getHeight(); return rect; } 

Utilizando este método, puede obtener el área tanto de ImageView como de la vista de superposición y, a continuación, calcular el área de recorte utilizando una base matemática;)

Es necesario combinar la biblioteca Cropper y PhotoView. He creado exactamente lo mismo para mi proyecto añadiendo la funcionalidad para seleccionar la imagen de la cámara o la galería. Compartir el código en Github. Se ha agregado un archivo apk en el proyecto. Utilice el dispositivo verdadero para probar la cámara pues el emulador no maneja bien la cámara. Aquí está el enlace a mi proyecto.

https://github.com/ozeetee/AndroidImageZoomCrop

  • ¿Por qué imageView.setLayerType (View.LAYER_TYPE_SOFTWARE, null); Y <aplicación android: hardwareAccelerated = "false" tienen un efecto diferente?
  • Efecto ondulado en estado prensado + transparencia en estado normal
  • Galería y pantalla completa ImageView, problema en ponerlos juntos
  • Visualización de imagen de mapa de bits en vista de imagen mediante adaptador simple
  • Cargando varias imágenes con Picasso en el fondo
  • Java Android - recorte Imagen en ImageView
  • Falla de la cámara androide entrega resultados resultinfo
  • Cómo mostrar una imagen en el cuadro de diálogo
  • Cómo cargar un ImageView desde un archivo png?
  • Android - Vista de imagen en el centro en toda la resolución de la pantalla
  • El fondo de pantalla ImageView dentro de la vista personalizada no aparece en algunos dispositivos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.