una suspension superposiciĆ³n superposicion solucion que pantalla htc desactivar definitiva como aplicaciones android android-layout android-webview android-imageview

android - suspension - solucion definitiva a la superposicion de pantalla



Android Android con zoom/desplazamiento de imagen con superposiciones (5)

Me gustaría mostrar una imagen (incluidas las funciones 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 dentro de la imagen.

  • Si el usuario se desplaza, las superposiciones también deberían moverse
  • Si el usuario amplía, las superposiciones no se deben ampliar, sino que mantienen 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.

Mi pregunta principal es: ¿cómo podría hacer esto?

Lo que he intentado hasta ahora

  • Intenté implementarlo dentro de un WebView, ya que proporcionaba la funcionalidad básica de ampliación y escala. Sin embargo, no logré agregar superposiciones sin usar Javascript y HTML (lo que pensé que no era una forma 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 una función de superposición desde mi punto de vista.

Preguntas

¿Hay una solución o enfoque simple para mi problema?

¿Cuál es la forma correcta de agregar y mover vistas en tiempo de ejecución en Android? (Por lo general, usaría un diseño básico y jugaría con el margen, ¿sería la mejor práctica?)

¿Podría alguien señalarme la dirección correcta, por favor?

Min. Nivel API: 10


Creo que este te puede ayudar

Refiere este proyecto Enlace

Tiene un desplazamiento automático de la imagen y Zoom una imagen cuando hace clic en él.


¿Has intentado subclasificar View y manejarte gestos de usuario? Es mi primera opción para comportamientos complejos como tal. Debería verse algo como esto:

  • En su clase que extiende la vista, debe crear una instancia de la imagen requerida y de las superposiciones en el momento de la creación como objetos de mapa de bits.
  • El evento OnScroll calculará cómo debería ser la imagen y las superposiciones después de dicho desplazamiento, actualizará los mapas de bits e invalidará la vista actual
  • Usando un GestureDetector, puedes manejar eventos pellizcos y tratar eventos de acercamiento / alejamiento solo como eventos de desplazamiento
  • Recuerde llamar siempre invalidar después de cambiar sus Bitmaps
  • Dibuja los mapas de bits durante el método onDraw

Mucho material sobre estas tareas individuales en , avíseme si necesita ayuda adicional en alguno de estos.


Sugiero extender la clase View y anular el método onDraw . Echa un vistazo a la API de Canvas .

Probablemente tengas un método onDraw que se ve así:

@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 }

Dado que no necesita que sus marcadores sean ampliables, probablemente no necesitará un paso de escala, pero necesita calcular su posición correctamente.

Dependiendo de su número de objetos, etc., es posible que necesite una forma más optimizada de dibujar los marcadores (por ejemplo, volver a dibujar las áreas rectangulares modificadas). ver View.invalidate (Rect)


Después de un largo tiempo, encontré la respuesta exacta a mi solución: TileView

Configurando la vista del 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.