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.
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é
Finalmente obtuve la solución combinando la biblioteca Cropper y las bibliotecas PhotoView.