Construir una línea de tiempo con la vista personalizada
Estoy construyendo una aplicación para Android con eventos cronometrados y no estoy seguro de qué diseño debo utilizar para crear mi línea de tiempo.
Los eventos pueden tener alturas diferentes y pueden crecer cuando el usuario los toca pero tienen el mismo ancho;
- ¿Cuál es el espacio de nombres XML para Android de la aplicación?
- ¿Puede la carpeta Diseño de Android contener subcarpetas?
- Diseño diferente para orientación horizontal y vertical
- Java.lang.IllegalStateException: ScrollView puede alojar sólo un hijo directo
- El restablecimiento del botón de conmutación no funciona correctamente
. . . ------------- | | Event 4 > | -------------- ------------- | < Event 7 | | | | | -------------- . . .
Tengo dos tipos de vista:
-
EventView
bruja celebrar la información del evento y drow su contorno -
TimeBarView
bruja deTimeBarView
es la barra en el centro (tiene una cierta característica y se extiende en un palmo muy largo
¿Cómo puedo colocar mis artículos por lo que es respetuoso del tiempo en mi línea de tiempo (por ejemplo, una semana podría ser 10px)
Cualquier ayuda es apreciada. Gracias !
- Cambiar el color del botón sin cambiar la forma en android
- Al extender las vistas secundarias LinearLayout no están visibles
- El logotipo de la aplicación está situado en la mitad de la barra ActionBar y la mitad en la pantalla mainActivty
- Android EditText onClick Listener definido en Layout falla con Obscure Exception
- Wrap_content en recycleview, toma altura del elemento (lista horizontal)
- Cómo puedo colocar el menú de desbordamiento debajo de la barra de herramientas en lugar del menú de desbordamiento para superponer la barra de aplicaciones
- ButterKnife no trabaja con Jack?
- Android: diseño relativo dos botones ocupan todo el espacio horizontal disponible
Estoy abordando el mismo problema ahora.
Todavía no tengo una solución completa, pero tengo una idea:
Puesto que usted tiene a lados a la línea de tiempo, ListView
no es apropiado porque los eventos pueden solaparse.
En su lugar, considere el uso de una GridView de dos columnas. Recomiendo usar AndroidStaggeredGrid , que admiten diferentes tamaños de elementos.
Para la "barra de tiempo" real que se ejecuta en el centro, voy a simplemente utilizar una línea estrecha como el fondo para el GridView.
No habrá marcadores en la línea de tiempo. En su lugar, los marcadores estarán en el EventView, ya sea a la izquierda oa la derecha, de tal manera que el marcador caiga exactamente en la barra de tiempo.
De esta manera, al desplazar la cuadrícula, dará la ilusión de que la barra de tiempo en sí está desplazándose.
Para indicar un intervalo de tiempo vacío, simplemente añada una vista vacía cuya altura sea proporcional al intervalo que representa.
Espero eso ayude…
No estoy seguro de que haya suficiente información en su publicación para determinar exactamente lo que está sucediendo durante el diseño, pero RelativeLayout probablemente hará lo que necesita. Puede utilizar leftMargin como una posición absoluta, o "rules" como RelativeLayout.LEFT_OF
Dicho esto, es muy fácil crear un diseño personalizado con el marco de Android. Simplemente anule onMeasure y onLayout. OnMeasure debe informar cuán grande es el contenedor (a menudo, tan grande como el padre lo permite), y es bastante sencillo.
OnLayout normalmente se ve así:
@Override protected void onLayout(boolean changed, int l, int t, int r, int b) { int count = getChildCount(); for (int i = 0; i < count; i++) { View child = getChildAt(i); if (child.getVisibility() != GONE) { // do the layout for each child here, with child.layout // eg, child.layout(0, 0, r, b); } }
View.layout toma 4 argumentos – superior, izquierda, inferior y derecha – bastante simple. Usted tiene acceso a las dimensiones del contenedor en l, t, ryb.
HTH
- Comando linux "android": ¿equivalente en Windows?
- ¿Qué diseño debo utilizar (css inline-block equivalente)