M0286_Libro Curso

Android

float scale = newDist / oldDist; matrix.postScale(scale, scale, mid.x, mid.y); } } break ; En el momento en el que se pulsa con el segundo dedo la pantalla, calculamos y guardamos la distancia entre los dedos. Cuando nos llega un evento de movimiento dentro del modo zoom, se vuelve a calcular la distancia entre dedos. Si es muy pequeña, ignoramos el evento. Si no lo es, escalamos la imagen alrededor del punto medio y restablecemos la matriz de transformación. La escala será la proporción entre la nueva distancia dividida por la distancia antigua. Si el resultado es mayor de 1, significará que los dedos se han separado y agrandaremos la imagen. Si los dedos se han acercado, esta escala será menor de 1, hará más pequeña la imagen. Y si son igual a 1, la imagen no será modificada. Para realizar todo esto debemos definir los métodos spacing() y midPoint() : /** determinamos la distancia entre los dedos */ private float spacing(MotionEvent event) { } Lo que hacemos es construir un vector (x, y) que es la diferencia entre los dos puntos, para después aplicar la fórmula de la distancia euclidiana para calcular el espacio. Y ahora definimos el método midPoint() para calcular el punto medio entre dos puntos: /** Calculamos el punto medio entre los dedos */ private void midPoint(PointF point, MotionEvent event) { float x = event.getX(0) - event.getX(1); float y = event.getY(0) - event.getY(1); return FloatMath.sqrt(x * x + y * y);

float x = event.getX(0) + event.getX(1); float y = event.getY(0) + event.getY(1); point.set(x / 2, y / 2);

} Si ejecutamos la aplicación, deberíamos poder arrastrar la imagen con un solo dedo, y si apoyamos un segundo dedo sobre ella, poder realizar el gesto del pellizco o de separarlos para hacer zoom.

210

Made with FlippingBook - Online catalogs