Android Zoomable / desplazable ImageView con superposiciones
Me gustaría mostrar una imagen (incluida la funcionalidad de desplazamiento y zoom). Además, necesito agregar algunas superposiciones a la imagen dinámicamente. Las superposiciones están en relación con el contenido de la imagen.
- Si el usuario se desplaza, las superposiciones deben moverse también
- Si el usuario zooms, las superposiciones no deben ser ampliadas, sino mantener su posición relativa a la imagen
En otras palabras: Me gustaría implementar un mapa con algunos marcadores, pero proporciono mi propio material de mapa.
- ¿Cómo puedo saber si mi WebView está cargado al 100%?
- Extraño tema de GoBack de la webview en android
- Cómo WebView.getTitle () de un hilo de interfaz de usuario?
- Detectar memoria disponible dentro de un WebView
- WebView de Android no cargando URL
Mi pregunta principal es: ¿Cómo podría hacer esto?
Lo que he intentado hasta ahora
- Intenté implementarlo dentro de un WebView, ya que proporcionó la funcionalidad básica de zoom y escalado. Sin embargo, no tuve éxito en la adición de superposiciones sin utilizar Javascript y HTML (lo que pensé que no era una manera muy conveniente de resolver el problema)
- Hay proyectos (es decir, TouchImageView ) que están implementando la funcionalidad de desplazamiento / zoom, pero hacen que sea aún más difícil agregar funcionalidad de superposición propia desde mi punto de vista.
Preguntas
¿Hay una solución o un acercamiento simple a mi problema?
¿Cuál es la forma correcta de agregar y mover vistas en tiempo de ejecución en Android? (Normalmente, usaría un diseño básico y jugaría con el margen – ¿sería la mejor práctica?)
¿Podría alguien que me apunte a la dirección correcta, por favor.
Min. Nivel del API: 10
- Inicia sesión de Google en la aplicación sin agregarla a las cuentas de dispositivos
- Interceptar solicitud de fuente de video HTML5 en Android WebView
- Cómo saber cuando se ha terminado la renderización de WebView
- Recuperar User-Agent mediante programación
- Webview hace que ANR
- Android WebView no carga una URL HTTPS
- Vista Web de Android: la página web debe ajustarse a la pantalla del dispositivo
- Buscando un menú desplegable en la vista web de Android que esté funcionando
Yo sugeriría extender la clase View
y sobreescribir el método onDraw
. Echa un vistazo a la API de lienzo .
Es probable que tenga un método onDraw que se vea como:
@Override public void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.save(); canvas.translate(mPosX, mPosY); //position of your actual data canvas.scale(mScaleFactor, mScaleFactor); // zoom factor map.draw(canvas); //you draw your map here canvas.restore(); //go back to saved state //for each marker you have, do the same "save - translate - scale - draw" loop }
Puesto que usted no necesita sus marcadores para ser zoomable, usted no necesitará probablemente el paso de la escala pero usted necesita calcular su posición correctamente.
Dependiendo de su número de objetos, etc, puede que tenga que tener una forma más optimizada de dibujar sus marcadores (por ejemplo, volver a dibujar sólo áreas rectangulares cambiadas). Vea View.invalidate (Rect)
Creo que este puede ayudarte
Referir este proyecto Enlace
Tiene un desplazamiento automático de la imagen y el zoom de una imagen cuando haga clic en él.
¿Ha intentado subclasificar Ver y manejar los gestos de los usuarios? Es mi primera opción para comportamientos complejos como tales. Debe ser algo como esto:
- En la clase extendiendo Vista, debe instanciar la imagen y superposiciones necesarias en el momento de la creación como objetos Bitmap
- OnScroll calculará cómo la imagen y las superposiciones pueden ser después de tal desplazamiento, actualizar los mapas de bits e invalidar la vista actual
- Mediante un GestureDetector, puede gestionar eventos de pellizco y tratar los eventos de zoom in / zoom out de la misma forma que los eventos de desplazamiento
- Recuerde llamar siempre invalidate después de cambiar su Bitmaps
- Dibujar los mapas de bits durante el método onDraw
Un montón de material sobre esta tareas individuales en StackOverflow, avíseme si necesita ayuda adittional en cualquiera de estos.
Compruebe este proyecto de ejemplo https://github.com/jzafrilla/AndroidImageHostpot
Después de mucho tiempo, encontré la respuesta exacta a mi solución: TileView
Configuración de la vista de mapa:
@Override protected void onCreate( Bundle savedInstanceState ) { super.onCreate( savedInstanceState ); TileView tileView = new TileView( this ); tileView.setSize( 2000, 3000 ); // the original size of the untiled image tileView.addDetailLevel( 1f, "tile-%d-%d.png"); setContentView( tileView ); }
Agregar el marcador:
tileView.addMarker( someView, 250, 500, -0.5f, -1.0f );
Código de la documentación.
- Cómo descartar / cerrar / contraer SearchView en ActionBar en MainActivity?
- ¿Es posible ocultar / cambiar el número de móvil del remitente mientras se envía sms en android?