visor una studio seleccionar poner pasar mostrar manejo imagenes imagen galeria fondo como añadir ajustar android imageview android-imageview crop

android - una - Recortar y acercar la imagen sin mover la vista de superposición Mover la imagen en ImageView



seleccionar imagen de galeria android studio (4)

Necesita combinar la biblioteca Cropper y PhotoView. Creé exactamente lo mismo para mi proyecto y agregué la funcionalidad para seleccionar imágenes de la Cámara o Galería. Compartir el código en Github. Se agregó un archivo apk en el proyecto. Use un dispositivo real para probar la cámara ya que el emulador no maneja bien la cámara. Aquí está el enlace a mi proyecto.

https://github.com/ozeetee/AndroidImageZoomCrop

Hola, quiero recortar la imagen sin mover la vista de superposición, sino mover la imagen.

La imagen se puede mover por todos lados. 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 puede acercarse o alejarse y también se puede mover en ImageView1 . Ver view_scaledImage es el área que quiero recortar y guardar. ¿Cómo hago esto?


Así es como puedes 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; }

Usando este método, puede obtener el área de ImageView y de la vista de superposición, y luego calcular el área de recorte utilizando algunas matemáticas básicas;)


Puede usar la biblioteca de recortes de imagen . 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 una función de ampliación. Mira el ejemplo en el enlace que mencioné