2010-04-15 11 views
10

? Solo quería saber si hay algún tipo de clase para usar las características multitouch de Android 2.1. Específicamente, estoy tratando de implementar el zoom pellizco y me preguntaba si siempre tengo que medir la distancia entre dos eventos táctiles y calcular el nivel de zoom por mi cuenta.¿Hay una API incorporada para manejar la funcionalidad de pellizcar-zoom en Android

Gracias, Chris

+1

Estoy comenzando con el desarrollador de Android, si no hay uno, esta sería una gran oportunidad para comenzar uno y ponerlo a disposición de los demás. – onaclov2000

+0

Parece confundir el término "multitouch". Lo que está pidiendo específicamente es la funcionalidad de "pellizcar zoom". Cuál es una de las cosas que se puede lograr usando multitouch. La funcionalidad multitáctil es simplemente la capacidad de detectar dos o más eventos táctiles en la pantalla al mismo tiempo. –

Respuesta

1

Ha habido cortes creadas por los desarrolladores que permiten multitouch en el navegador y el navegador Dolphin. Estos vienen en roms personalizadas y estoy seguro de que se pueden descargar.

También Google ha lanzado multitáctiles oficialmente en el Nexus One y Motorola en su hito. Esto significa que deberías poder obtener una clase oficial, pero apuesto a que es para la versión 2.1 de Android.

También creo que sería seguro asumir que desea que esto funcione en teléfonos rooteados. Eso significa que puede estar atascado en el uso de Android 2.1 y tal vez hasta 2.0.

+0

La pregunta es sobre el desarrollo de Android. Este sitio es sobre el desarrollo de software. Tu respuesta es para usuarios finales. – CommonsWare

+0

@CommonsWare: Esto es mucho sobre el desarrollo de software. Si la API no está disponible para Android 2.0 sino para Android 2.1, sí afecta el resultado de su desarrollo. –

4

Creo que tendrá que calcular el nivel de zoom usted mismo. Este artículo parece un buen recurso para comenzar: http://blogs.zdnet.com/Burnette/?p=1847

+1

Creo que Ed Burnette (autor de esa publicación) entra en mayor detalle en su próxima tercera edición de su libro, Hello, Android. – CommonsWare

15

Estoy tratando de hacer lo mismo, y como de costumbre, mi primer instinto fue buscar en el código fuente de Android. Los bits interesantes parecen estar en clase ScaleGestureDetector, que no es público, pero su aprobación javadoc dice

@hide API espera de

así que espero que se hará pública en algún momento.

Actualización: ScaleGestureDetector ahora es parte de la API de Android 2.2.

0

¿Está tratando de acercar una imagen? Como una solución simple, puede usar un WebView para mostrar su imagen, tiene una función de pizca y zoom incorporada.

3

Depende de la versión de Android que desee orientar.

  • 2.2 o posterior - use el ScaleGestureDetector incorporado. El javadoc es muy útil, pero mira el ejemplo a continuación.
  • 2.0-2.2 - ScaleGestureDetector no está incorporado, por lo que copy the version from Android y compilarlo en su aplicación.
  • Pre-2.0 - Mutitouch no fue apoyada antes de 2.0, por lo que necesita copy ScaleGestureDetector.java from Android y hacer un poco más de trabajo a no utilizar ninguna API multitouch en dispositivos no compatibles:

Para evitar el uso de las API multitouch en pre 2.0 dispositivos, debe crear una interfaz para ScaleGestureDetector (Eclipse puede hacerlo a través del menú Refactor) y una implementación ficticia que usarán los dispositivos 1.x. Llamaremos a nuestra interfaz ScaleGestureDetectorInterface y nuestra implementación ficticia FakeScaleGestureDetector.

Aquí hay una muestra de apoyo de pre-2.0 dispositivos:

// If you don't care about pre-2.0 devices, just make this a 
// ScaleGestureDetector and skip the API check in the constructor. 
private final ScaleGestureDetectorInterface mScaleDetector; 

public MyView { 
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ECLAIR) { 
     // Use the fake version which won't call any multitouch APIs 
     mScaleDetector = new FakeScaleGestureDetector(); 
    } else { 
     // We are using SDK 2.0+, use the real implementation. 
     mScaleDetector = new ScaleGestureDetector(context, 
      new MyScaleListener()); 
    } 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    // On pre-2.0, the implementation does nothing. 
    return mScaleDetector.onTouchEvent(event); 
} 

private class MyScaleListener extends 
     ScaleGestureDetector.SimpleOnScaleGestureListener { 
    @Override 
    public boolean onScale(ScaleGestureInterface detector) { 
     float scaleFactor = detector.getScaleFactor(); 
     // If you were using a matrix to zoom an ImageView, you would do 
     // something like this: 
     mMatrix.postScale(scaleFactor, scaleFactor, detector.getFocusX(), 
      detector.getFocusY()); 
     return true; 
    } 
} 
Cuestiones relacionadas